我调用如下函数,修改文件的时间,传入LastWriteTime为13:51:00,修改后看文件属性的修改时间确为21:51:02,为什么呢?
是我这段代码有问题吗?procedure SetFileTime(const FileName:string;
const CreationTime,LastWriteTime,LastAccessTime: TDateTime);
var
Fs:TFileStream;
iCreationTime,iLastWriteTime,iLastAccessTime:TSystemTime;
ftCreationTime,ftLastWriteTime,ftLastAccessTime:TFileTime;
begin
DateTimeToSystemTime(CreationTime,iCreationTime);
DateTimeToSystemTime(LastWriteTime,iLastWriteTime);
DateTimeToSystemTime(LastAccessTime,iLastAccessTime);
FS := Nil;
try
FS := TFileStream.Create(FileName, fmOpenReadWrite);
SystemTimeToFileTime(iCreationTime, ftCreationTime);
SystemTimeToFileTime(iLastWriteTime, ftLastWriteTime);
SystemTimeToFileTime(iLastAccessTime, ftLastAccessTime);
Windows.SetFileTime(FS.Handle,@ftCreationTime, @ftLastAccessTime, @ftLastWriteTime);
finally
FS.Free;
end;
end;
是我这段代码有问题吗?procedure SetFileTime(const FileName:string;
const CreationTime,LastWriteTime,LastAccessTime: TDateTime);
var
Fs:TFileStream;
iCreationTime,iLastWriteTime,iLastAccessTime:TSystemTime;
ftCreationTime,ftLastWriteTime,ftLastAccessTime:TFileTime;
begin
DateTimeToSystemTime(CreationTime,iCreationTime);
DateTimeToSystemTime(LastWriteTime,iLastWriteTime);
DateTimeToSystemTime(LastAccessTime,iLastAccessTime);
FS := Nil;
try
FS := TFileStream.Create(FileName, fmOpenReadWrite);
SystemTimeToFileTime(iCreationTime, ftCreationTime);
SystemTimeToFileTime(iLastWriteTime, ftLastWriteTime);
SystemTimeToFileTime(iLastAccessTime, ftLastAccessTime);
Windows.SetFileTime(FS.Handle,@ftCreationTime, @ftLastAccessTime, @ftLastWriteTime);
finally
FS.Free;
end;
end;
procedure SetFileTime(const FileName:string;
const CreationTime,LastWriteTime,LastAccessTime: TDateTime);
var
Fs:TFileStream;
iCreationTime,iLastWriteTime,iLastAccessTime:TSystemTime;
ftCreationTime,ftLastWriteTime,ftLastAccessTime:TFileTime;
begin
DateTimeToSystemTime(CreationTime,iCreationTime);
DateTimeToSystemTime(LastWriteTime,iLastWriteTime);
DateTimeToSystemTime(LastAccessTime,iLastAccessTime);
FS := Nil;
try
FS := TFileStream.Create(FileName, fmOpenReadWrite);
SystemTimeToFileTime(iCreationTime, ftCreationTime);
LocalFileTimeToFileTime(ftCreationTime,ftCreationTime);//将本地文件时间转为文件时间
SystemTimeToFileTime(iLastWriteTime, ftLastWriteTime);
LocalFileTimeToFileTime(ftCreationTime,ftLastWriteTime);//将本地文件时间转为文件时间
SystemTimeToFileTime(iLastAccessTime, ftLastAccessTime);
LocalFileTimeToFileTime(ftCreationTime,ftLastAccessTime);//将本地文件时间转为文件时间
Windows.SetFileTime(FS.Handle,@ftCreationTime, @ftLastAccessTime, @ftLastWriteTime);
finally
FS.Free;
end;
end;
Not all file systems can record creation and last access times and not all file systems record them in the same manner. For example, on FAT, create time has a resolution of 10 milliseconds, write time has a resolution of 2 seconds, and access time has a resolution of 1 day (really, the access date). Therefore, the GetFileTime function may not return the same file time information set using SetFileTime. NTFS delays updates to the last access time for a file by up to one hour after the last access.