Oops. Here's the missing function.
FUNCTION GetUNCForDriveLetter
LPARAMETER cDriveLetterToCheck
LOCAL cBuffer, nResult, lcunc
IF TYPE('cDriveLetterToCheck') # 'C' OR ;
LEN(cDriveLetterToCheck) < 2 OR ;
SUBSTR(cDriveLetterToCheck,2,1) # ':' OR ;
! BETWEEN(UPPER(LEFT(cDriveLetterToCheck,1)),'A','Z')
RETURN ''
ENDIF
DECLARE INTEGER WNetGetConnection IN Win32API ;
STRING @cLocalDrive, ;
STRING @cRemoteUNCBuffer, ;
INTEGER @nSizeOfBuffer
cBuffer = SPACE(511)
nResult = WNetGetConnection(LEFT(cDriveLetterToCheck,2), ;
@cBuffer, ;
511)
IF nResult # 0
RETURN ''
ELSE
lcunc=LEFT(cBuffer,AT(CHR(0),cBuffer)-1)
RETURN lcunc
ENDIF
ENDFUNC
>Greg,
>a small Copy and Paste problem,
>THIS.GetUNCForDriveLetter(LEFT(lcDriveRoot,2))
>wouldn't works in the procedure which is not a part of the class :-)
>
>
>
>
>>>Hi all,
>>>
>>>I want to set something up on a form that will allow the user to select from a list of valid drives on the system (C:, F:, etc.). I'd like to do this with a listbox or a spinner.
>>>
>>>How can I determine what the valid drives would be? Once that's determined, how do I get a list of the valid folders on that drive?
>>>
>>>Thanks!
>>>
>>>John
>>
>>This returns a string of drives letters and the type of drives they are.
>>
>>
>> PROCEDURE DriveListing
>> * 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 = ""
>>
>> 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"
>> lcunc=THIS.GetUNCForDriveLetter(LEFT(lcDriveRoot,2))
>> IF TYPE('lcunc')="C" .AND. !EMPTY(lcunc)
>> lcDrivestring = lcunc
>> ENDIF
>> CASE lcDrivetype = DRIVE_CDROM
>> lcDrivestring = "CD-ROM drive"
>> CASE lcDrivetype = DRIVE_RAMDISK
>> lcDrivestring = "RAM disk"
>> ENDCASE
>> lcDrives = lcDrives + lcDriveRoot + " " + lcDrivestring + chr(13)+chr(10)
>> ENDIF
>> NEXT
>>
>> *=MESSAGEBOX(lcDrives, 0 + 64 + 0,'All Drives Listing')
>> RETURN lcDrives
>> RETURN
>>
>> ENDPROC
>>
>>
Greg Reichert