Microsoft KB Archive/193623

= How To Determine the Logical Drives on a System =

Article ID: 193623

Article Last Modified on 6/30/2004

-

APPLIES TO


 * Microsoft Visual FoxPro 6.0 Professional Edition

-



This article was previously published under Q193623



SUMMARY
You can use the GetLogicalDrives API function to find which logical drives are present in a system. The GetLogicalDrives function returns a 32-bit value in which each bit represents whether the logical drive exists. For example, if the system has an A drive, bit 0 will be set, and if the system has a drive Z, bit 25 will be set.



MORE INFORMATION
The following program demonstrates the use of the GetLogicalDrives API function. The sample program calls the function and loops through each bit of the return value, using the FoxPro Bittest function to determine if a particular drive is present or not. It displays all the drives on the system and their drive types in a message box.

Sample Code
* This program enumerates all drives on a Win32 system and * displays a message box containing the drive letters and * types of all logical drives on the system. *

* Constants for drive types. #DEFINE DRIVE_UNKNOWN 0 #DEFINE DRIVE_NO_ROOT_DIR 1 #DEFINE DRIVE_REMOVABLE 2 #DEFINE DRIVE_FIXED 3 #DEFINE DRIVE_REMOTE 4 #DEFINE DRIVE_CDROM 5 #DEFINE DRIVE_RAMDISK 6 #DEFINE CR CHR(13)

DECLARE INTEGER GetLogicalDrives IN Win32API DECLARE INTEGER GetDriveType IN Win32API STRING RootPath

PRIVATE lcDrivestring, lcDriveRoot, liDrivelist, lcDrives, i  lcDrives = ""

* GetLogicalDrives returns a 32-bit value containing a list of  * available drives. If the specific bit is ON, the drive letter * corresponding to that position exists. liDrivelist = GetLogicalDrives

* Check each of the bits FOR i = 0 TO 31 IF BITTEST(liDrivelist, i)  * If the 0th bit is ON, that means drive 'A:', * the 2nd bit is 'C:", etc.        lcDriveRoot = CHR(65 + i) + ":\"   * Perform a GetDriveType to determine if it is a floppy, CD, etc.         lcDrivetype = GetDriveType(lcDriveRoot)         DO CASE            CASE lcDrivetype = DRIVE_UNKNOWN               lcDrivestring = "Cannot be determined"            CASE lcDrivetype = DRIVE_NO_ROOT_DIR               lcDrivestring = "Root directory does not exist"            CASE lcDrivetype = DRIVE_REMOVABLE               lcDrivestring = "Floppy/removable drive"            CASE lcDrivetype = DRIVE_FIXED               lcDrivestring = "Hard drive/nonremovable drive"            CASE lcDrivetype = DRIVE_REMOTE               lcDrivestring = "Remote/Network drive"            CASE lcDrivetype = DRIVE_CDROM               lcDrivestring = "CD-ROM drive"            CASE lcDrivetype = DRIVE_RAMDISK               lcDrivestring = "RAM disk"         ENDCASE         lcDrives = lcDrives + lcDriveRoot + " " + lcDrivestring + CR      ENDIF NEXT

=MESSAGEBOX(lcDrives, ;     0 + 64 + 0)

