fix #18, empty drive errors

This commit is contained in:
Basile Burg 2015-07-17 16:30:05 +02:00
parent 6403d23dd7
commit 4357515016
1 changed files with 15 additions and 9 deletions

View File

@ -636,20 +636,26 @@ procedure listDrives(aList: TStrings);
var var
drv: char; drv: char;
ltr, nme: string; ltr, nme: string;
OldMode : Word;
{$ENDIF} {$ENDIF}
begin begin
{$IFDEF WINDOWS} {$IFDEF WINDOWS}
setLength(nme, 255); setLength(nme, 255);
for drv := 'A' to 'Z' do OldMode := SetErrorMode(SEM_FAILCRITICALERRORS);
begin try
ltr := drv + ':\'; for drv := 'A' to 'Z' do
if not GetVolumeInformation(PChar(ltr), PChar(nme), 255, nil, nil, nil, nil, 0) then begin
continue; ltr := drv + ':\';
case GetDriveType(PChar(ltr)) of if not GetVolumeInformation(PChar(ltr), PChar(nme), 255, nil, nil, nil, nil, 0) then
DRIVE_REMOVABLE, continue;
DRIVE_FIXED, case GetDriveType(PChar(ltr)) of
DRIVE_REMOTE: aList.Add(ltr); DRIVE_REMOVABLE,
DRIVE_FIXED,
DRIVE_REMOTE: aList.Add(ltr);
end;
end; end;
finally
SetErrorMode(OldMode);
end; end;
{$ELSE} {$ELSE}
aList.Add('//'); aList.Add('//');