Sul mio server ci sono alcuni file con Data di modifica 31/DEC/1979 (Non chiedermi il motivo). Quindi FileExists
restituisce false.Problema con FileExists e Data di modifica
Sysutils.FileExists
assomiglia a questo:
function FileAge(const FileName: string): Integer;
var
Handle: THandle;
FindData: TWin32FindData;
LocalFileTime: TFileTime;
begin
Handle := FindFirstFile(PChar(FileName), FindData);
if Handle <> INVALID_HANDLE_VALUE then
begin
Windows.FindClose(Handle);
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
if FileTimeToDosDateTime(LocalFileTime, LongRec(Result).Hi,
LongRec(Result).Lo) then Exit;
end;
end;
Result := -1;
end;
function FileExists(const FileName: string): Boolean;
begin
Result := FileAge(FileName) <> -1;
end;
La mia domanda è, perché la funzione dipende FileAge
in primo luogo? Non è la seguente riga sufficiente ?:
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
// Yes the file exists!
O anche sulla base di attributi di file:
function MyFileExists(const Name: string): Boolean;
var
R: DWORD;
begin
R := GetFileAttributes(PChar(Name));
Result := (R <> DWORD(-1)) and ((R and FILE_ATTRIBUTE_DIRECTORY) = 0);
end;
Era per gestire i sistemi di archiviazione che creava implicitamente in lettura. So che esistevano, ma sono d'accordo se riesco a trovare qualche documentazione ora. – david