Jak sprawdzic czy plik istnieje w WinApi

Aby w WinApi sprawdzic czy plik istnieje, trzeba sprobowac go utworzyc i skorzystac z zwracanego bledu, np.

function FileExists(FName: String): Boolean;
var
  FileO: THandle;

begin
  FileO := CreateFile(PChar(FName), GENERIC_READ, FILE_SHARE_READ, Nil, OPEN_EXISTING, 0, 0); // proba utworzenia pliku
  if FileO <> INVALID_HANDLE_VALUE then // jesli plik istnieje
    Result := True
  else // jesli plik nie istnieje
    Result := False;

  CloseHandle(FileO);
end;

Uzycie wyglada tak jak przy VCL, czyli:

if FileExists('C:\plik.txt') then
  MessageBox(0, 'Plik istnieje!', 'Informacja', 0)
else
  MessageBox(0, 'Plik nie istnieje!', 'Informacja', 0);

2 komentarzy

to niestarczy, np. mi - program w WinApi to 14 kB a zwykle FileExists to + 200 kB?

Ja raczej zastosowal bym GetFileAttributes, bo CreateFile moze zwrocic INVALID_HANDLE_VALUE takze w przypadku plikow do ktorych nie mamy dostepu a istnieja.