Registriert seit: 10. Jan 2005
Ort: Bönen
1.174 Beiträge
Delphi 11 Alexandria
|
AW: Fehler bei FileDateToDateTime(FileGetDate(FHandle)) wenn Dateidatum < 1980
23. Apr 2011, 15:44
@Satty67,
danke für den Hinweis.
Ich hab's jetzt gesehen, dass das überladene FileAge direkt unter dem alten FileAge in der SysUtils steht...
Ich hatte erwartet, dass NUR die alte Version oder NUR die neue Version zu finden ist und aus diesem Grunde nicht weiter gesucht...
Sorry.
Delphi-Quellcode:
function FileAge(const FileName: string): Integer; overload;
{$IFDEF MSWINDOWS}
var
FindData: TWin32FileAttributeData;
LocalFileTime: TFileTime;
begin
if GetFileAttributesExFunc(Pointer(Filename), GetFileExInfoStandard, @FindData) then
begin
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;
{$ENDIF}
{$IFDEF LINUX}
var
st: TStatBuf;
begin
if stat(PChar(FileName), st) = 0 then
Result := st.st_mtime
else
Result := -1;
end;
{$ENDIF}
{$IFDEF MSWINDOWS}
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
var
FindData: TWin32FindData;
LSystemTime: TSystemTime;
LocalFileTime: TFileTime;
begin
Result := False;
if GetFileAttributesExFunc(Pointer(Filename), GetFileExInfoStandard, @FindData) then
begin
if (FindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) = 0 then
begin
Result := True;
FileTimeToLocalFileTime(FindData.ftLastWriteTime, LocalFileTime);
FileTimeToSystemTime(LocalFileTime, LSystemTime);
with LSystemTime do
FileDateTime := EncodeDate(wYear, wMonth, wDay) +
EncodeTime(wHour, wMinute, wSecond, wMilliSeconds);
end;
end;
end;
{$ENDIF}
Jürgen Indes sie forschten, röntgten, filmten, funkten, entstand von selbst die köstlichste Erfindung: der Umweg als die kürzeste Verbindung zwischen zwei Punkten. (Erich Kästner)
|
|
Zitat
|