| 
       
  | 
   
      ![]()  | 
      
       | 
   ||
| 
       | 
      |||
         
  | 
   ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 
       
 | 
   ||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Visual Basic Disk/Drive API Routines GetLogicalDriveStrings: An API 'DriveExists' Routine  | 
   |
| Posted: | Wednesday October 20, 1999 | 
| Updated: | Monday December 26, 2011 | 
| Applies to: | VB4-32, VB5, VB6 | 
| Developed with: | VB6, Windows NT4 | 
| OS restrictions: | None | 
| Author: | VBnet - Randy Birch | 
| 
          Related: 
  | 
      FindFirstFile: Changing File and/or Folder Attributes Recursively
 FindFirstFile: Fast Directory File Count FindFirstFile: Extract Filename from a Full Path FindFirstFile: Performance Comparison - FSO vs. API FindFirstFile: Comparison of FindFirstFile and SearchTreeForFile FindFirstFile: Save a Recursive Search of All Drives to Disk FindFirstFile: Save a Recursive Search of Specified Drives to Disk GetFileVersionInfo: File Search and File Property Info GetLogicalDriveStrings: An API 'DriveExists' Routine FindFirstFile: An API 'FileExists' Routine FindFirstFile: An API 'FolderExists' Routine PathFileExists: A Local/Network File/Folder/Drive Exists Routine  | 
   
| Prerequisites | 
| None. | 
| 
          | 
   
        For
         the API purest, here's a tiny function that simply returns True if a specified drive exists, or False if not.
         Using GetLogicalDriveStrings, its a simple matter of retrieving all the available drives, then performing a case-insensitive Instr() against the result to determine if the passed drive letter is present. This method will also return True if the drive passed is a mapped network drive.  | 
   
| BAS Module Code | 
| None. | 
| 
          | 
   
| Form Code | 
| 
       
 | 
   
| Drop a combo box and a Label onto a form and add the following: | 
| 
          | 
   
         Option Explicit '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Copyright ©1996-2011 VBnet/Randy Birch, All Rights Reserved. ' Some pages may also contain other copyrights by the author. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Distribution: You can freely use this code in your own ' applications, but you may not reproduce ' or publish this code on any web site, ' online service, or distribute as source ' on any media without express permission. '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Private Declare Function GetLogicalDriveStrings Lib "kernel32" _
   Alias "GetLogicalDriveStringsA" _
  (ByVal nBufferLength As Long, _
   ByVal lpBuffer As String) As Long
   
   
Private Sub Form_Load()
   Dim x As Long
   
  'fill a combo with the letters A-Z
   For x = 65 To 90
      Combo1.AddItem Chr$(x) & ":"
   Next
   
End Sub
Private Sub Combo1_Click()
  'pass the selected letter to the DriveExists
  'routine, returning the result to a label.
   If Combo1.ListIndex > -1 Then
   
      Label1.Caption = DriveExists(Combo1.List(Combo1.ListIndex))
      
   End If
   
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 | 
   
| Comments | 
| This function will return the correct result regardless of format of the drive string passed .. i.e. you could pass 'M', 'M:' or 'M:\" | 
| 
          | 
   
  | 
      
| 
          | 
         |||||
  				
                     			
  | 
         |||||
| 
          | 
         |||||
| 
             
            	
            	Copyright ©1996-2011 VBnet and Randy Birch. All Rights Reserved.  | 
         
          ![]()  |