我不喜欢写太复杂的代码,就写的简单一点吧。下面的例子更改文件的创建时间,SetFileTime的另外两个参数是文件最后访问时间和最后更改时间,你可以照猫画虎。procedure SomeProc;
var
f : TFileStream;
ft : FILETIME;
st : SYSTEMTIME;
begin
f := TFileStream.Create('WIN.TXT', fmOpenReadWrite);
GetFileTime(f.Handle, @ft, nil, nil);
FileTimeToSystemTime(ft, st);
st.wYear := 2000;
st.wMonth := 1;
st.wDay := 1;
SystemTimeToFileTime(st, ft);
SetFileTime(f.Handle, @ft, nil, nil);
f.Destroy;
end;
var
f : TFileStream;
ft : FILETIME;
st : SYSTEMTIME;
begin
f := TFileStream.Create('WIN.TXT', fmOpenReadWrite);
GetFileTime(f.Handle, @ft, nil, nil);
FileTimeToSystemTime(ft, st);
st.wYear := 2000;
st.wMonth := 1;
st.wDay := 1;
SystemTimeToFileTime(st, ft);
SetFileTime(f.Handle, @ft, nil, nil);
f.Destroy;
end;
function SetFileDateTime(AFileName: string; ADateTime: TDateTime): boolean;
var
FileHandle: integer;
ST: TSystemTime;
FT: TFileTime;
OldAttr: word;
begin
Result := false;
try
OldAttr := FileGetAttr(AFileName);
//如果是只读文件,去掉只读属性
if OldAttr and faReadOnly > 0 then
FileSetAttr(AFileName, OldAttr and not faReadOnly);
except
exit;
end;
FileHandle := FileOpen(AFileName, fmOpenWrite or fmShareDenyNone);
if FileHandle > 0 then
try
//将 Delphi 的 TDateTime 转为系统时间
DateTimeToSystemTime(ADateTime, ST);
//将系统时间转为本地文件时间
SystemTimeToFileTime(ST, FT);
//将本地文件时间转为文件时间
LocalFileTimeToFileTime(FT, FT);
//设置文件时间
Result := SetFileTime(FileHandle, @FT, @FT, @FT);
finally
FileClose(FileHandle);
//恢复文件属性
FileSetAttr(AFileName, OldAttr);
end;
end;