Solved

How to check if a drive is mapped

Posted on 2002-04-23
15
333 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
  • 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
Free Tool: IP Lookup

Get more info about an IP address or domain name, such as organization, abuse contacts and geolocation.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

 
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 50 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

Free Tool: Postgres Monitoring System

A PHP and Perl based system to collect and display usage statistics from PostgreSQL databases.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Question has a verified solution.

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

Suggested Solutions

Title # Comments Views Activity
Copy a row 12 64
Exit a vb6 apps when a calling it apps closes 15 53
TT Auto Dashboard 13 95
adding "ungroup sheets" to existing vbs code 5 33
There are many ways to remove duplicate entries in an SQL or Access database. Most make you temporarily insert an ID field, make a temp table and copy data back and forth, and/or are slow. Here is an easy way in VB6 using ADO to remove duplicate row…
You can of course define an array to hold data that is of a particular type like an array of Strings to hold customer names or an array of Doubles to hold customer sales, but what do you do if you want to coordinate that data? This article describes…
Get people started with the process of using Access VBA to control Excel using automation, Microsoft Access can control other applications. An example is the ability to programmatically talk to Excel. Using automation, an Access application can laun…
Get people started with the utilization of class modules. Class modules can be a powerful tool in Microsoft Access. They allow you to create self-contained objects that encapsulate functionality. They can easily hide the complexity of a process from…

820 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