2008-09-27 19 views

Respuesta

12

Los delfines tienden a preferir el enfoque FindFirst (la estructura SearchRec tiene algunos de ellos), pero sugeriría la función WinForm API GetFileAttributesEx.

0

Puede llamar a la función winapi GetFileInformationByHandle. Aparentemente JCL tiene una función GetFileLastWrite también se podría utilizar

13

Trate

function FileAge(const FileName: string; out FileDateTime: TDateTime): Boolean; 

De SysUtils.

+0

Obsoleto al momento de este comentario. –

+0

'FileAge()' obtiene la fecha CREAR del archivo, no la fecha ÚLTIMA MODIFICACIÓN. –

+0

@JerryGagnon - No, utiliza '_WIN32_FILE_ATTRIBUTE_DATA.ftLastWriteTime' –

6

Desde la biblioteca DSiWin32 freeware:

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 } 
+3

por qué el parámetro var en lugar de out - no parece utilizar el valor que entra? – Kohi

+1

Punto válido. Soy un programador de la "vieja escuela", lo aprendí antes de que se inventara 'out' y automáticamente uso 'var' en todas las ocasiones. – gabr

4

Esto debería funcionar, y es nativa de código de 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; 
3
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 ya ha quedado obsoleto, archivo de ayuda Uso dice F.TimeStamp.
Solo para actualizar esto debido a las versiones posteriores de Delphi

0

System.IOUtils tiene un registro TFile con varias funciones para obtener la antigüedad del archivo, p. GetCreationTime, GetLastAccessTime, GetLastWriteTime

Cuestiones relacionadas