function GetFileDate(FileName: string): string;
var
FHandle: Integer;
begin
FHandle := FileOpen(FileName, 0);
try
Result := DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
finally
FileClose(FHandle);
end;
end;
Дата последнего изменения файла
Проблема заключается в том что надо определить дату последнего изменения файла.
Нашел следующий код:
Код:
но в строчке:
Код:
Result := DateTimeToStr(FileDateToDateTime(FileGetDate(FHandle)));
он выдает ошибку.
Если убрать FileDateToDateTime то он работает но выводит как можно понять не правильную дату.
Кто-нибудь сталкивался с подобным?
Какую ошибку выдает?
Вот такая.
А чего, AsiignFile не работает?
OlbanyRok предложи свой вариант. я что то не совсем тебя понял
Ну неужели никто не сталкивался с такой проблемой.
FileAge не пробовал?
Он возвращяет время создание файла а мне именно надо время последнего изменения
Вот функция:
Код:
function TFileInfo.LastWritten : TDateTime;
var
LTime : TFileTime;
Systemtime : TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftLastWriteTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
var
LTime : TFileTime;
Systemtime : TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftLastWriteTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
Вот весь юнит
Код:
unit FileInfo;
interface
uses
forms, shellapi, windows, sysutils;
type
EFileInfo = exception;
TLangInfoBuffer = array [1..4] of SmallInt;
TFileInfo = class
private
f : TSearchRec;
fVerBlk : TVSFixedFileInfo;
fFileName : string;
function GetFileVersion( AFileName : string ) : boolean;
public
constructor Create( AFileName : string ); // Создаём объект
destructor Destroy; override;
function Execute : integer; // Открывает файл в программе, связанной с ним
function VersionString : string; // Версия файла. Строка пустая, если строка не найдена
function OS : string; // Операционная система
function Path : string; // Путь файла
function FileName : string; // Имя файла
function name : string; // Имя файла без расширения
function DosFileName : string; // Имя файла в DOS
function FileExt : string; // Расширение файла
function FileType : string; // Тип файла
function FileSize : longint; // Размер файла
function isDebugBuild : boolean; // True если флаг отладки (debug build) установлен
function isPreRelease : boolean; // True если флаг prerelease установлен
function isPrivateBuild : boolean; // True если флаг private установлен
function isSpecialBuild : boolean; // True если флаг special build установлен
function isDirectory : boolean; // True если файл является директорией
function isHidden : boolean; // True если файл является скрытым (hidden)
function isSystemFile : boolean; // True если файл является системным
function isVolumeId : boolean; // True если файл является меткой тома
function isArchive : boolean; // True если файл является архивом
function CreationTime : TDateTime; // Время создания файла
function LastAccessed : TDateTime; // Время последнего доступа к файлу
function LastWritten : TDateTime; // Время последней записи в файл
end;
implementation
constructor TFileInfo.Create(AFileName: string);
var
ret: integer;
begin
inherited Create;
fFileName := AFileName;
ret := FindFirst( AFileName, faReadOnly + faHidden+ faSysFile +
faVolumeID + faDirectory + faArchive + faAnyFile, f );
if ret <> 0 then
SysUtils.RaiseLastWin32Error;
end;
destructor TFileInfo.Destroy;
begin
FindClose( f );
end;
function TFileInfo.GetFileVersion(AFileName: string): boolean;
var
InfoSize, puLen: DWord;
Pt, InfoPtr: Pointer;
begin
InfoSize := GetFileVersionInfoSize( PChar(AFileName), puLen );
fillchar( fVerBlk, sizeof(TVSFixedFileInfo), 0);
if InfoSize > 0 then
begin
GetMem(Pt,InfoSize);
GetFileVersionInfo( PChar(AFileName), 0, InfoSize, Pt);
VerQueryValue(Pt,'\',InfoPtr,puLen);
move(InfoPtr^, fVerBlk, sizeof(TVSFixedFileInfo) );
FreeMem(Pt);
result := true;
end
else
result := false;
end;
function TFileInfo.VersionString: string;
begin
if GetFileVersion( fFileName ) then
result := Format('%u.%u.%u.%u',
[HiWord(fVerBlk.dwProductVersionMS),
LoWord(fVerBlk.dwProductVersionMS),
HiWord(fVerBlk.dwProductVersionLS),
LoWord(fVerBlk.dwProductVersionLS)])
else
result := '';
end;
function TFileInfo.isDebugBuild : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_DEBUG) <> 0
end;
function TFIleInfo.isPreRelease : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_PRERELEASE) <> 0
end;
function TFIleInfo.isPrivateBuild : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_PRIVATEBUILD) <> 0
end;
function TFIleInfo.isSpecialBuild : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_SPECIALBUILD) <> 0
end;
function TFileInfo.OS : string;
begin
if GetFileVersion( fFileName ) then
case fVerBlk.dwFileOS of
VOS_DOS_WINDOWS16 : result := 'MS-DOS or 16 bit Windows';
VOS_DOS_WINDOWS32 : result := '32 bit Windows';
VOS_OS216_PM16 : result := '16 bit OS/2';
VOS_OS232_PM32 : result := '32 bit OS/2';
VOS_NT_WINDOWS32 : result := 'Win32 or Windows NT';
else
result := 'Unknown OS';
end
else
result := '';
end;
function TFileInfo.FileType : string;
var
S: string;
begin
S := '';
if GetFileVersion( fFileName ) then
begin
case fVerBlk.dwFileType of
VFT_APP : S := 'Application';
VFT_DLL : S := 'Dynamic Link Library (DLL)';
VFT_DRV :
begin
S := 'Device Driver - ';
case fVerBlk.dwFileSubtype of
VFT2_DRV_PRINTER : S := S + 'Printer';
VFT2_DRV_KEYBOARD : S := S + 'Keyboard';
VFT2_DRV_LANGUAGE : S := S + 'Language';
VFT2_DRV_DISPLAY : S := S + 'Display';
VFT2_DRV_MOUSE : S := S + 'Mouse';
VFT2_DRV_NETWORK : S := S + 'Network';
VFT2_DRV_SYSTEM : S := S + 'System';
VFT2_DRV_INSTALLABLE : S := S + 'Installable';
VFT2_DRV_SOUND : S := S + 'Sound';
else
S := S + 'Unknown';
end;
end;
VFT_FONT :
begin
S := 'Font File - ';
case fVerBlk.dwFileSubType of
VFT2_FONT_RASTER : S := S + 'Raster';
VFT2_FONT_VECTOR : S := S + 'Vector';
VFT2_FONT_TRUETYPE : S := S + 'TrueType';
else
S := S + 'Unknown';
end;
end;
VFT_VXD : S := 'Virtual Device';
VFT_STATIC_LIB : S := 'Static Link Library';
else
S := 'Unknown File Type';
end;
end;
Result := S;
end;
function TFileInfo.Path : string;
begin
result := ExtractFilePath( fFileName );
end;
function TFileInfo.FileName : string;
begin
result := ExtractFileName( fFileName );
end;
function TFileInfo.name : string;
begin
if Pos( FileExt, FileName ) > 0 then
result := Copy( FileName, 0, pos( FileExt, FileName )-1 )
else
result := FileName;
end;
function TFileInfo.DosFileName : string;
begin
result := StrPas( f.FindData.cAlternateFileName )
end;
function TFileInfo.FileExt : string;
begin
result := ExtractFileExt( fFileName );
end;
function TFileInfo.isDirectory : boolean;
begin
result := f.Attr and faDirectory = faDirectory;
end;
function TFileInfo.isHidden : boolean;
begin
result := f.Attr and faHidden = faHidden;
end;
function TFileInfo.isSystemFile : boolean;
begin
result := f.Attr and faSysFile = faSysFile;
end;
function TFileInfo.isVolumeId : boolean;
begin
result := f.Attr and faVolumeId = faVolumeId;
end;
function TFileInfo.isArchive : boolean;
begin
result := f.Attr and faArchive = faArchive;
end;
function TFileInfo.FileSize : longint;
begin
result := f.Size;
end;
function TFileInfo.CreationTime : TDateTime;
var
LTime: TFileTime;
Systemtime: TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftCreationTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
function TFileInfo.LastAccessed : TDateTime;
var
LTime : TFileTime;
Systemtime : TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftLastAccessTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
function TFileInfo.LastWritten : TDateTime;
var
LTime : TFileTime;
Systemtime : TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftLastWriteTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
function TFileInfo.Execute : integer;
begin
result := shellapi.ShellExecute( Application.Handle, 'open',
pChar( fFileName ), '', pChar(Path), SW_SHOWDEFAULT );
case result of
0 :
raise Exception.Create( 'Недостаточно памяти или ресурсов.' );
ERROR_FILE_NOT_FOUND :
raise Exception.Create( 'Указанный файл не найден.' );
ERROR_PATH_NOT_FOUND :
raise Exception.Create( 'Указанный путь не найден.' );
ERROR_BAD_FORMAT :
raise Exception.Create( 'Ошибка файла .EXE (не -Win32 .EXE или ошибка ' + 'в .EXE).' );
SE_ERR_ACCESSDENIED :
raise Exception.Create( 'Доступ к файлу запрещён.' );
SE_ERR_ASSOCINCOMPLETE :
raise Exception.Create( 'The filename association is incomplete or invalid.' );
SE_ERR_DDEBUSY :
raise Exception.Create( 'Транзакция DDE не может быть завершена, потому что ' +
'другая транзакция DDE находится в процессе выполнения.' );
SE_ERR_DDEFAIL :
raise Exception.Create( 'Ошибка транзакции DDE.' );
SE_ERR_DDETIMEOUT :
raise Exception.Create( 'DDE транзакция не может быть завершина из-за тайм-аута.' );
SE_ERR_DLLNOTFOUND :
raise Exception.Create( 'Указанная dynamic-link library не найдена.' );
SE_ERR_NOASSOC :
raise Exception.Create( 'Не найдено приложение связанной с данным расширением файла.' );
SE_ERR_OOM :
raise Exception.Create( 'Недостаточно памяти для завершения операции.' );
SE_ERR_SHARE :
raise Exception.Create( 'Файл используется другим приложением.' );
else
end;
end;
end.
interface
uses
forms, shellapi, windows, sysutils;
type
EFileInfo = exception;
TLangInfoBuffer = array [1..4] of SmallInt;
TFileInfo = class
private
f : TSearchRec;
fVerBlk : TVSFixedFileInfo;
fFileName : string;
function GetFileVersion( AFileName : string ) : boolean;
public
constructor Create( AFileName : string ); // Создаём объект
destructor Destroy; override;
function Execute : integer; // Открывает файл в программе, связанной с ним
function VersionString : string; // Версия файла. Строка пустая, если строка не найдена
function OS : string; // Операционная система
function Path : string; // Путь файла
function FileName : string; // Имя файла
function name : string; // Имя файла без расширения
function DosFileName : string; // Имя файла в DOS
function FileExt : string; // Расширение файла
function FileType : string; // Тип файла
function FileSize : longint; // Размер файла
function isDebugBuild : boolean; // True если флаг отладки (debug build) установлен
function isPreRelease : boolean; // True если флаг prerelease установлен
function isPrivateBuild : boolean; // True если флаг private установлен
function isSpecialBuild : boolean; // True если флаг special build установлен
function isDirectory : boolean; // True если файл является директорией
function isHidden : boolean; // True если файл является скрытым (hidden)
function isSystemFile : boolean; // True если файл является системным
function isVolumeId : boolean; // True если файл является меткой тома
function isArchive : boolean; // True если файл является архивом
function CreationTime : TDateTime; // Время создания файла
function LastAccessed : TDateTime; // Время последнего доступа к файлу
function LastWritten : TDateTime; // Время последней записи в файл
end;
implementation
constructor TFileInfo.Create(AFileName: string);
var
ret: integer;
begin
inherited Create;
fFileName := AFileName;
ret := FindFirst( AFileName, faReadOnly + faHidden+ faSysFile +
faVolumeID + faDirectory + faArchive + faAnyFile, f );
if ret <> 0 then
SysUtils.RaiseLastWin32Error;
end;
destructor TFileInfo.Destroy;
begin
FindClose( f );
end;
function TFileInfo.GetFileVersion(AFileName: string): boolean;
var
InfoSize, puLen: DWord;
Pt, InfoPtr: Pointer;
begin
InfoSize := GetFileVersionInfoSize( PChar(AFileName), puLen );
fillchar( fVerBlk, sizeof(TVSFixedFileInfo), 0);
if InfoSize > 0 then
begin
GetMem(Pt,InfoSize);
GetFileVersionInfo( PChar(AFileName), 0, InfoSize, Pt);
VerQueryValue(Pt,'\',InfoPtr,puLen);
move(InfoPtr^, fVerBlk, sizeof(TVSFixedFileInfo) );
FreeMem(Pt);
result := true;
end
else
result := false;
end;
function TFileInfo.VersionString: string;
begin
if GetFileVersion( fFileName ) then
result := Format('%u.%u.%u.%u',
[HiWord(fVerBlk.dwProductVersionMS),
LoWord(fVerBlk.dwProductVersionMS),
HiWord(fVerBlk.dwProductVersionLS),
LoWord(fVerBlk.dwProductVersionLS)])
else
result := '';
end;
function TFileInfo.isDebugBuild : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_DEBUG) <> 0
end;
function TFIleInfo.isPreRelease : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_PRERELEASE) <> 0
end;
function TFIleInfo.isPrivateBuild : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_PRIVATEBUILD) <> 0
end;
function TFIleInfo.isSpecialBuild : boolean;
begin
result := FALSE;
if GetFileVersion( fFileName ) then
result := (fVerBlk.dwFileFlagsMask and fVerBlk.dwFileFlags and
VS_FF_SPECIALBUILD) <> 0
end;
function TFileInfo.OS : string;
begin
if GetFileVersion( fFileName ) then
case fVerBlk.dwFileOS of
VOS_DOS_WINDOWS16 : result := 'MS-DOS or 16 bit Windows';
VOS_DOS_WINDOWS32 : result := '32 bit Windows';
VOS_OS216_PM16 : result := '16 bit OS/2';
VOS_OS232_PM32 : result := '32 bit OS/2';
VOS_NT_WINDOWS32 : result := 'Win32 or Windows NT';
else
result := 'Unknown OS';
end
else
result := '';
end;
function TFileInfo.FileType : string;
var
S: string;
begin
S := '';
if GetFileVersion( fFileName ) then
begin
case fVerBlk.dwFileType of
VFT_APP : S := 'Application';
VFT_DLL : S := 'Dynamic Link Library (DLL)';
VFT_DRV :
begin
S := 'Device Driver - ';
case fVerBlk.dwFileSubtype of
VFT2_DRV_PRINTER : S := S + 'Printer';
VFT2_DRV_KEYBOARD : S := S + 'Keyboard';
VFT2_DRV_LANGUAGE : S := S + 'Language';
VFT2_DRV_DISPLAY : S := S + 'Display';
VFT2_DRV_MOUSE : S := S + 'Mouse';
VFT2_DRV_NETWORK : S := S + 'Network';
VFT2_DRV_SYSTEM : S := S + 'System';
VFT2_DRV_INSTALLABLE : S := S + 'Installable';
VFT2_DRV_SOUND : S := S + 'Sound';
else
S := S + 'Unknown';
end;
end;
VFT_FONT :
begin
S := 'Font File - ';
case fVerBlk.dwFileSubType of
VFT2_FONT_RASTER : S := S + 'Raster';
VFT2_FONT_VECTOR : S := S + 'Vector';
VFT2_FONT_TRUETYPE : S := S + 'TrueType';
else
S := S + 'Unknown';
end;
end;
VFT_VXD : S := 'Virtual Device';
VFT_STATIC_LIB : S := 'Static Link Library';
else
S := 'Unknown File Type';
end;
end;
Result := S;
end;
function TFileInfo.Path : string;
begin
result := ExtractFilePath( fFileName );
end;
function TFileInfo.FileName : string;
begin
result := ExtractFileName( fFileName );
end;
function TFileInfo.name : string;
begin
if Pos( FileExt, FileName ) > 0 then
result := Copy( FileName, 0, pos( FileExt, FileName )-1 )
else
result := FileName;
end;
function TFileInfo.DosFileName : string;
begin
result := StrPas( f.FindData.cAlternateFileName )
end;
function TFileInfo.FileExt : string;
begin
result := ExtractFileExt( fFileName );
end;
function TFileInfo.isDirectory : boolean;
begin
result := f.Attr and faDirectory = faDirectory;
end;
function TFileInfo.isHidden : boolean;
begin
result := f.Attr and faHidden = faHidden;
end;
function TFileInfo.isSystemFile : boolean;
begin
result := f.Attr and faSysFile = faSysFile;
end;
function TFileInfo.isVolumeId : boolean;
begin
result := f.Attr and faVolumeId = faVolumeId;
end;
function TFileInfo.isArchive : boolean;
begin
result := f.Attr and faArchive = faArchive;
end;
function TFileInfo.FileSize : longint;
begin
result := f.Size;
end;
function TFileInfo.CreationTime : TDateTime;
var
LTime: TFileTime;
Systemtime: TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftCreationTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
function TFileInfo.LastAccessed : TDateTime;
var
LTime : TFileTime;
Systemtime : TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftLastAccessTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
function TFileInfo.LastWritten : TDateTime;
var
LTime : TFileTime;
Systemtime : TSystemtime;
begin
FileTimeToLocalFileTime( f.FindData.ftLastWriteTime, LTime);
FileTimeToSystemTime( LTime, SystemTime );
result := SystemTimeToDateTime( SystemTime);
end;
function TFileInfo.Execute : integer;
begin
result := shellapi.ShellExecute( Application.Handle, 'open',
pChar( fFileName ), '', pChar(Path), SW_SHOWDEFAULT );
case result of
0 :
raise Exception.Create( 'Недостаточно памяти или ресурсов.' );
ERROR_FILE_NOT_FOUND :
raise Exception.Create( 'Указанный файл не найден.' );
ERROR_PATH_NOT_FOUND :
raise Exception.Create( 'Указанный путь не найден.' );
ERROR_BAD_FORMAT :
raise Exception.Create( 'Ошибка файла .EXE (не -Win32 .EXE или ошибка ' + 'в .EXE).' );
SE_ERR_ACCESSDENIED :
raise Exception.Create( 'Доступ к файлу запрещён.' );
SE_ERR_ASSOCINCOMPLETE :
raise Exception.Create( 'The filename association is incomplete or invalid.' );
SE_ERR_DDEBUSY :
raise Exception.Create( 'Транзакция DDE не может быть завершена, потому что ' +
'другая транзакция DDE находится в процессе выполнения.' );
SE_ERR_DDEFAIL :
raise Exception.Create( 'Ошибка транзакции DDE.' );
SE_ERR_DDETIMEOUT :
raise Exception.Create( 'DDE транзакция не может быть завершина из-за тайм-аута.' );
SE_ERR_DLLNOTFOUND :
raise Exception.Create( 'Указанная dynamic-link library не найдена.' );
SE_ERR_NOASSOC :
raise Exception.Create( 'Не найдено приложение связанной с данным расширением файла.' );
SE_ERR_OOM :
raise Exception.Create( 'Недостаточно памяти для завершения операции.' );
SE_ERR_SHARE :
raise Exception.Create( 'Файл используется другим приложением.' );
else
end;
end;
end.
Кто еще что подскажет?
Сейчас разбираюсь с функцией GetFileTime. Может кто-нибудь сказать что-нить внятное по поводу этой функции и как ее использовать для получения даты последнего изменения файла?
Цитата: nevile
такой код я то же находил пытался с ним разобраться но не получилось.
Кто еще что подскажет?
Сейчас разбираюсь с функцией GetFileTime. Может кто-нибудь сказать что-нить внятное по поводу этой функции и как ее использовать для получения даты последнего изменения файла?
Кто еще что подскажет?
Сейчас разбираюсь с функцией GetFileTime. Может кто-нибудь сказать что-нить внятное по поводу этой функции и как ее использовать для получения даты последнего изменения файла?
Странно, у меня этот код работает без вопросов...
У меня он сразу не принимает название функции: TFileInfo.LastWritten
Пример писалсо буквально 2 минуты...
Код:
var
Form1: TForm1;
intr : TFileInfo;
implementation
{$R *.dfm}
uses Fileinfo; {файлинфо тот самый юнит, сохранил в папку}
procedure TForm1.Button1Click(Sender: TObject);
var
bl : TDateTime;
begin
intr:= TFileInfo.Create('1.txt');
bl:=intr.LastWritten;
form1.Caption:= TimeToStr(bl);
intr.Free;
end;
Form1: TForm1;
intr : TFileInfo;
implementation
{$R *.dfm}
uses Fileinfo; {файлинфо тот самый юнит, сохранил в папку}
procedure TForm1.Button1Click(Sender: TObject);
var
bl : TDateTime;
begin
intr:= TFileInfo.Create('1.txt');
bl:=intr.LastWritten;
form1.Caption:= TimeToStr(bl);
intr.Free;
end;
Код:
function SFmt(const S: String; Width: Byte): String;
begin
if Length(S) < Width then
Result := StringOfChar('0', Width - Length(S)) + S
else Result:=S;
end;
function GetFileLastWriteTime(FileName: string):string;
var
FTLastWriteTime, LFTLastWriteTime: FILETIME;
STLastWriteTime: SYSTEMTIME;
DFile:DWORD;
begin
DFile:=CreateFile(PChar(FileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
if DFile<>INVALID_HANDLE_VALUE then
begin
GetFileTime(DFile, Nil, Nil, @FTLastWriteTime);
FileTimeToLocalFileTime(FTLastWriteTime, LFTLastWriteTime);
FileTimeToSystemTime(LFTLastWriteTime, STLastWriteTime);
CloseHandle(DFile);
With STLastWriteTime do
Result:=SFmt(IntToStr(wDay),2)+'.'+SFmt(IntToStr(wMonth),2)+'.'+SFmt(IntToStr(wYear),2)+' '+SFmt(IntToStr(wHour),2)+':'+SFmt(IntToStr(wMinute),2)+':'+SFmt(IntToStr(wSecond),2);
end
else
Result:='Error: file not found!';
end;
begin
if Length(S) < Width then
Result := StringOfChar('0', Width - Length(S)) + S
else Result:=S;
end;
function GetFileLastWriteTime(FileName: string):string;
var
FTLastWriteTime, LFTLastWriteTime: FILETIME;
STLastWriteTime: SYSTEMTIME;
DFile:DWORD;
begin
DFile:=CreateFile(PChar(FileName),GENERIC_READ,FILE_SHARE_READ,nil,OPEN_EXISTING,0,0);
if DFile<>INVALID_HANDLE_VALUE then
begin
GetFileTime(DFile, Nil, Nil, @FTLastWriteTime);
FileTimeToLocalFileTime(FTLastWriteTime, LFTLastWriteTime);
FileTimeToSystemTime(LFTLastWriteTime, STLastWriteTime);
CloseHandle(DFile);
With STLastWriteTime do
Result:=SFmt(IntToStr(wDay),2)+'.'+SFmt(IntToStr(wMonth),2)+'.'+SFmt(IntToStr(wYear),2)+' '+SFmt(IntToStr(wHour),2)+':'+SFmt(IntToStr(wMinute),2)+':'+SFmt(IntToStr(wSecond),2);
end
else
Result:='Error: file not found!';
end;
а вот еще вариант: http://forum.codenet.ru/showpost.php?p=179861&postcount=6
вот собственно что получил, может кому после пригодится:
Код:
function SFmt(const S: String; Width: Byte): String;
begin
if Length(S) < Width then
Result := StringOfChar('0', Width - Length(S)) + S
else Result:=S;
end;
//ПОЛУЧЕНИЕ ДАТЫ ИЗМЕНЕНИЯ ФАЙЛА
function GetFileDate(FileName: string): string;
var
FHandle: Integer;
FTLastWriteTime, LFTLastWriteTime: FILETIME;
STLastWriteTime: SYSTEMTIME;
begin
FHandle := FileOpen(FileName, 0);
try
GetFileTime(FHandle, Nil, Nil, @FTLastWriteTime);
FileTimeToLocalFileTime(FTLastWriteTime, LFTLastWriteTime);
FileTimeToSystemTime(LFTLastWriteTime, STLastWriteTime);
With STLastWriteTime do
Result:=SFmt(IntToStr(wDay),2)+'.'+SFmt(IntToStr(wMonth),2)+'.'+SFmt(IntToStr(wYear),2)+' '+SFmt(IntToStr(wHour),2)+':'+SFmt(IntToStr(wMinute),2)+':'+SFmt(IntToStr(wSecond),2);
finally
FileClose(FHandle);
end;
end;
begin
if Length(S) < Width then
Result := StringOfChar('0', Width - Length(S)) + S
else Result:=S;
end;
//ПОЛУЧЕНИЕ ДАТЫ ИЗМЕНЕНИЯ ФАЙЛА
function GetFileDate(FileName: string): string;
var
FHandle: Integer;
FTLastWriteTime, LFTLastWriteTime: FILETIME;
STLastWriteTime: SYSTEMTIME;
begin
FHandle := FileOpen(FileName, 0);
try
GetFileTime(FHandle, Nil, Nil, @FTLastWriteTime);
FileTimeToLocalFileTime(FTLastWriteTime, LFTLastWriteTime);
FileTimeToSystemTime(LFTLastWriteTime, STLastWriteTime);
With STLastWriteTime do
Result:=SFmt(IntToStr(wDay),2)+'.'+SFmt(IntToStr(wMonth),2)+'.'+SFmt(IntToStr(wYear),2)+' '+SFmt(IntToStr(wHour),2)+':'+SFmt(IntToStr(wMinute),2)+':'+SFmt(IntToStr(wSecond),2);
finally
FileClose(FHandle);
end;
end;
Теперь возник еще вопрос, но запостю его как отдельную тему потому что будет интересен многим я думаю.