Die Funktion
FileExists aus
Unit SysUtils war schon immer etwas mangelhaft.
Grund:
FileExists stützt sich auf FileAge ab. So kann es passieren, dass eine vorhandene Datei
mit defektem Datums-/Zeiteintrag als nicht vorhanden gemeldet wird.
Hat dir eigentlich noch niemand gesagt, dass die Funktionen
AssignFile, ReWrite, CloseFile, Write, Read, ... und der Datentyp File (und alle Verwandten)
steinalte Überbleibsel aus den Anfangstagen von Pascal sind ?
Stattdessen sollte
TFileStream verwendet werden.
Für deinen Zweck (herauszufinden, ob in einen angegebenen Ordner geschrieben werden kann)
sollte man noch näher an die Windows
API herangehen:
Delphi-Quellcode:
function IsPathWriteable(const path:string):Boolean;
var
filename : string;
hnd : THandle;
begin
filename := IncludeTrailingBackslash(path)+'.$$$'; // temporary filename
DeleteFile(PChar(filename));
hnd := CreateFile(PChar(filename),GENERIC_WRITE, 0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL,
0);
if hnd <> INVALID_HANDLE_VALUE then
begin
CloseHandle(hnd);
DeleteFile(PChar(filename));
Result := True;
end
else
Result := False;
end;