




Дельфийцам нравится подход FindFirst (в структуре SearchRec есть некоторые из них), но я бы предложил функцию GetFileAttributesEx API Win32.
Вы можете вызвать функцию winapi GetFileInformationByHandle. Aparently JCL имеет функцию GetFileLastWrite, которую вы также можете использовать
Пытаться
function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean;
Из SysUtils.
Устарело на момент написания этого комментария.
FileAge() получает дату СОЗДАНИЯ файла, а не дату ПОСЛЕДНЕГО ИЗМЕНЕНИЯ.
@JerryGagnon - Нет, он использует _WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime
@HX_unbanned - устарела только первая перегрузка (возвращающая FileTime)
Эта перегрузка была добавлена в Delphi 2006 (на случай, если кто-то еще столкнется с ошибкой компиляции в более старых версиях)
Из бесплатной библиотеки DSiWin32:
function DSiFileTimeToDateTime(fileTime: TFileTime; var dateTime: TDateTime): boolean;
var
sysTime: TSystemTime;
begin
Result := FileTimeToSystemTime(fileTime, sysTime);
if Result then
dateTime := SystemTimeToDateTime(sysTime);
end; { DSiFileTimeToDateTime }
function DSiGetFileTimes(const fileName: string; var creationTime, lastAccessTime,
lastModificationTime: TDateTime): boolean;
var
fileHandle : cardinal;
fsCreationTime : TFileTime;
fsLastAccessTime : TFileTime;
fsLastModificationTime: TFileTime;
begin
Result := false;
fileHandle := CreateFile(PChar(fileName), GENERIC_READ, FILE_SHARE_READ, nil,
OPEN_EXISTING, 0, 0);
if fileHandle <> INVALID_HANDLE_VALUE then try
Result :=
GetFileTime(fileHandle, @fsCreationTime, @fsLastAccessTime,
@fsLastModificationTime) and
DSiFileTimeToDateTime(fsCreationTime, creationTime) and
DSiFileTimeToDateTime(fsLastAccessTime, lastAccessTime) and
DSiFileTimeToDateTime(fsLastModificationTime, lastModificationTime);
finally
CloseHandle(fileHandle);
end;
end; { DSiGetFileTimes }
почему параметр var, а не out - похоже, вы не используете входящее значение?
Действительный пункт. Я программист старой школы, я выучил это до того, как был изобретен out, и я автоматически использую var во всех случаях.
Это должно работать, и это собственный код Delphi.
function GetFileModDate(filename : string) : integer;
var
F : TSearchRec;
begin
FindFirst(filename,faAnyFile,F);
Result := F.Time;
//if you wanted a TDateTime, change the return type and use this line:
//Result := FileDateToDatetime(F.Time);
FindClose(F);
end;
function GetFileModDate(filename : string) : TDateTime;
var
F : TSearchRec;
begin
FindFirst(filename,faAnyFile,F);
Result := F.TimeStamp;
//if you really wanted an Int, change the return type and use this line:
//Result := F.Time;
FindClose(F);
end;
F.Time с тех пор устарел, в файле справки указано Use F.TimeStamp.
Просто чтобы обновить это из-за более поздних версий Delphi
System.IOUtils имеет запись TFile с несколькими функциями для получения возраста файла, например. GetCreationTime, GetLastAccessTime, GetLastWriteTime
Почему целое число, что не так с TDateTime?