Expiring Today—Celebrate National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

How to check if a drive is mapped

Posted on 2002-04-23
15
Medium Priority
?
339 Views
Last Modified: 2012-06-21
I want a function that will check if a particular drive is currently mapped and return the drive mapping if it is or return "" if it isn't.  Something I can add a Drive letter parameter to like:

Msgbox DriveMapping("K")

and get a message box that returns something like "\\odinput\psreports" if mapped or "" if not.
0
Comment
Question by:jbauer22
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 7
  • 4
  • 2
  • +2
15 Comments
 
LVL 4

Expert Comment

by:RichW
ID: 6964040
'You need to have reference to Microsoft Scripting Runtime first.
'Place is listbox on your form
Private Sub cmdInfo_Click()
    '
    Dim fldr As Folder
    Dim fso As New FileSystemObject
    Dim drv As Drive
    '
    Set drv = fso.GetDrive(fso.GetDriveName("C:"))
    '
    With List1
        .AddItem "Available space: " & FormatNumber(drv.AvailableSpace / 1024, 0) & " BK"
        .AddItem "Drive letter: " & drv.DriveLetter
        .AddItem "Drive type: " & drv.DriveType
        .AddItem "Drive file system: " & drv.FileSystem
        .AddItem "Drive free space: " & FormatNumber(drv.FreeSpace / 1024, 0) & " BK"
        .AddItem "Drive is ready: " & drv.IsReady
        .AddItem "Drive path: " & drv.Path
        .AddItem "Root folder: " & drv.RootFolder
        .AddItem "Serial number: " & drv.SerialNumber
        .AddItem "Share name: " & drv.ShareName
        .AddItem "Total size: " & FormatNumber(drv.TotalSize / 1024, 0) & " BK"
        .AddItem "Volume  name : " & drv.VolumeName
    End With
    '
End Sub

RichW
0
 
LVL 2

Author Comment

by:jbauer22
ID: 6964069
Want a function, please
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6964099
I am not sure if i understood you:

Function IsLetterMapped(DriveLetter As String) As String
If Dir$(DriveLetter & ":\*.*", vbArchive) <> "" Then
    IsLetterMapped = DriveLetter & ":\"
Else
    IsLetterMapped = ""
End If

End Function


Private Sub Form_Load()
MsgBox IsLetterMapped("K")
End Sub
0
Technology Partners: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
LVL 2

Author Comment

by:jbauer22
ID: 6964133
Richie,

If the Drive is not mapped then a Run-time error 68 will occur.  I tried this same method using the Dir function.  I suppose, I could use error handling to work this out.  I also wanted this function to return the current drive mapping if it was found.  Some string with the //Network...
0
 
LVL 20

Expert Comment

by:hes
ID: 6964187
0
 
LVL 16

Accepted Solution

by:
Richie_Simonetti earned 150 total points
ID: 6964545
0
 
LVL 1

Expert Comment

by:hiranmaya
ID: 6965005
Option Explicit

Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
   Alias "GetLogicalDriveStringsA" _
  (ByVal nBufferLength As Long, _
   ByVal lpBuffer As String) As Long
   
   
Private Sub Form_Load()

Debug.Print DriveExists("D:")
   
End Sub


Private Function DriveExists(SDrive As String) As Boolean

   Dim tmp As String
   Dim nBuffersize As Long
   
  'Call the API with a buffer size of 0.
  'The call fails, and the required size
  'is returned as the result.
   nBuffersize = GetLogicalDriveStrings(0&, tmp)

  'pad a string to hold the results
   tmp = Space$(nBuffersize)
   nBuffersize = Len(tmp)
   
  'and call again
   If GetLogicalDriveStrings(nBuffersize, tmp) Then
   
     'if the drive letter passed is in
     'the returned logical drive string,
     'return True. Use vbTextCompare for
     'a case-insensitive match (remembering
     'that when a compare method is specified,
     'the start position must also be specified.
      DriveExists = InStr(1, tmp, SDrive, vbTextCompare)

   End If
   
End Function

0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6965651
Hi hiranmaya, welcome to EE!
Please read guidelines regarding Comments vs. answers at bottom of page
Cheers and happy coding
0
 
LVL 2

Author Comment

by:jbauer22
ID: 6965680
Nice API but it doesn't return the network path. \\network\path
0
 
LVL 2

Author Comment

by:jbauer22
ID: 6965856
Nice API but it doesn't return the network path. \\network\path
0
 
LVL 2

Author Comment

by:jbauer22
ID: 6965858
Nice API but it doesn't return the network path. \\network\path
0
 
LVL 2

Author Comment

by:jbauer22
ID: 6965863
Wish I could figure out how to return the \\network\path given a drive letter.
0
 
LVL 4

Expert Comment

by:RichW
ID: 6965890
Set a reference to the Microsoft Scripting Runtime object

Private Sub Command1_Click()
Dim strShareName As String
strShareName = GetMapping("K")
End Sub


Public Function GetMapping(ByVal varDrive As String) As String
Dim fldr As Folder
Dim fso As New FileSystemObject
Dim drv As Drive
   
On Error GoTo err_mapping
    Set drv = fso.GetDrive(fso.GetDriveName(varDrive & ":"))
     GetMapping = drv.ShareName
Exit Function
err_mapping:
    MsgBox UCase(varDrive) & ":" & "drive Not mapped"

End Function
0
 
LVL 16

Expert Comment

by:Richie_Simonetti
ID: 6966150
:O
0
 
LVL 2

Author Comment

by:jbauer22
ID: 6966458
Thanks RichW.  Created a new question with 25 points for you to collect.
0

Featured Post

New benefit for Premium Members - Upgrade now!

Ready to get started with anonymous questions today? It's easy! Learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Introduction In a recent article (http://www.experts-exchange.com/A_7811-A-Better-Concatenate-Function.html) for the Excel community, I showed an improved version of the Excel Concatenate() function.  While writing that article I realized that no o…
When trying to find the cause of a problem in VBA or VB6 it's often valuable to know what procedures were executed prior to the error. You can use the Call Stack for that but it is often inadequate because it may show procedures you aren't intereste…
As developers, we are not limited to the functions provided by the VBA language. In addition, we can call the functions that are part of the Windows operating system. These functions are part of the Windows API (Application Programming Interface). U…
Get people started with the process of using Access VBA to control Outlook using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Microsoft Outlook. Using automation, an Access applic…
Suggested Courses

718 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question