如何在delphi下获取文件的长度和最后修改日期(150分)

  • 主题发起人 主题发起人 ky
  • 开始时间 开始时间
使用Windows API

BOOL GetFileInformationByHandle(
HANDLE hFile, // handle of file
LPBY_HANDLE_FILE_INFORMATION lpFileInformation // address of structure
);

typedef struct _BY_HANDLE_FILE_INFORMATION { // bhfi
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD dwVolumeSerialNumber;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
DWORD nNumberOfLinks;
DWORD nFileIndexHigh;
DWORD nFileIndexLow;
} BY_HANDLE_FILE_INFORMATION;

如果是Windows NT,还可以使用
BOOL GetFileAttributesEx(

LPCTSTR lpFileName, // pointer to string that specifies a file or directory
GET_FILEEX_INFO_LEVELS fInfoLevelId, // value that specifies the type of attribute information to obtain
LPVOID lpFileInformation // pointer to buffer to receive attribute information
);

typedef struct _WIN32_FILE_ATTRIBUTE_DATA{
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
DWORD nFileSizeHigh;
DWORD nFileSizeLow;
} WIN32_FILE_ATTRIBUTE_DATA, *LPWIN32_FILE_ATTRIBUTE_DATA;
 
GetFileSize
GetFileTime
也可以.
 
var
f: file of Byte;
FileHandle : Integer;
Size : Longint;
S: string;
Filedate:TDateTime;
begin

AssignFile(f,'d:/p.exe');
Reset(f);
size := FileSize(f);
CloseFile(F);
S := 'File size in bytes: ' + IntToStr(size);


FileHandle := FileOpen('d:/p.exe', fmOpenRead);
FileDate:=FileDateToDateTime(FileGetDate(FileHandle));
FileClose(filehandle);
S:='File DateTime:' + DateTimeToStr(Filedate);

end;
 
如何将已获取文件的ftLastWriteTime:: TFileTime;转换成delphi下的字符串。
 
获取是文件的最后修改时间,请注意是文件的修改时间,而不只是日期。
并将文件的修改时间转换成字符串的形式。比如:“00-8-25 16:07”。
 
获取是文件的最后修改时间,请注意是文件的修改时间,而不只是日期。
并将文件的修改时间转换成字符串的形式。比如:“00-8-25 16:07”。
 
typedef struct _FILETIME { // ft
DWORD dwLowDateTime;
DWORD dwHighDateTime;
} FILETIME;
---------------------------------------------------------------
We can use API <font color=#0000ff>FileTimeToSystemTime</font> convert FILETIME to SYSTEMTIME

BOOL FileTimeToSystemTime(
CONST FILETIME *lpFileTime, // pointer to file time to convert
LPSYSTEMTIME lpSystemTime // pointer to structure to receive system time
);

typedef struct _SYSTEMTIME { // st
WORD wYear;
WORD wMonth;
WORD wDayOfWeek;
WORD wDay;
WORD wHour;
WORD wMinute;
WORD wSecond;
WORD wMilliseconds;
} SYSTEMTIME;
So..........
DateTimeStr := format('%d%d5d', [....]);
or
DateTimeStr := formatdatetime('c', SystemTimeToDateTime(...));

the <font color=#0000ff>ftLastAccessTime&ftLastWriteTime</font> in struct FILETIME
is the time the file was last accessed or written to.
 
我通过filetimetosystemtime(..)及datetimetostr(SystemTimeToDateTime(..)),发现
显示的时间比实际的文件修改时间少了8个小时,不知为何?比如显示的时间为 00-8-25
5:35:46 而实际的文件修改时间为00-8-25 13:35:46。
 
我通过filetimetosystemtime(..)及datetimetostr(SystemTimeToDateTime(..)),发现
显示的时间比实际的文件修改时间少了8个小时,不知为何?比如显示的时间为 00-8-25
5:35:46 而实际的文件修改时间为00-8-25 13:35:46。
 
后退
顶部