Jak w pętli sprawdzić, czy plik istnieje na dysku

0

Witam serdecznie.
Borykam się z następującym problemem.

Potrzebuje pobrać ścieżkę do pliku, który znajduje się na pendrive.
Listę dysków (partycji) pobieram za pomocą funckji GetDriveType.
Rodzaj dysku pobieram za pomocą:

if DriveType = 2 then

I wyświetlam na ListView (tak jak było w FAQ).

Pobieranie informacji o napędach systemu

Jak w tej procedurze umieścić pętlę, alby sprawdziła za pomocą FileExist, czy na którymś dysku jest plik 'abc.txt'?

Zmodyfikowałem procedurę z powyższego linku:

procedure TForm1.Button1Click(Sender: TObject);
var
  DriveType, i : Integer;
  plik : String;
begin
Plik := 'test.txt';

  for I := Ord('A') to Ord('Z') do
  begin
    DriveType := GetDriveType(PChar(Chr(i) + ':\')); // pobierz typ dysku
      if DriveType = 2 then
        begin

              if FileExists(Chr(i)+':\'+Plik) then
                begin
                  Label1.Caption := 'Plik istnieje na partycji '+Chr(I);
                  Label2.Caption := Chr(i)+':\'+plik;
                end else begin
                  Label1.Caption := 'Pliku "'+plik+'" nie odnaleziono';
                end;
        end;
    end;
end;

Działa, ale po kliknięciu w button wywala taki błąd:

Exception Processing Message c0000013 Parameters 75b3bf7c 4 75b3bf7c 75b3bf7c

Anuluj Ponów próbę Kontynuuj

Po kliknięciu Kontynuuj -> działa.

0

if DriveType = 2 then

aaaa... magic number - tak się nie robi! skąd ktoś ma wiedzieć co to jest 2?

const DRIVE_REMOVABLE = 2; // jeśli brak stałej w standardowej bibliotece
...
if DriveType = DRIVE_REMOVABLE then

I nie jedź tak od 'A' do 'Z', bo przez to dostajesz wyjątek. Użyj GetLogicalDrives albo GetLogicalDriveStrings.
http://msdn.microsoft.com/en-us/library/windows/desktop/aa364972(v=vs.85).aspx

1 użytkowników online, w tym zalogowanych: 0, gości: 1