最后写入 FILETIME 总是返回当前时间
Last write FILETIME always returning current time
我需要将文件的最后修改时间与数据库中存储的日期时间进行比较。我最初查看 this question 开始。
我目前正在为文件的最后一次写入获取 FILETIME
,将其转换为 SYSTEMTIME
。然后我使用 SYSTEMTIME
创建一个 TDateTime
对象,我可以用它来进行比较。但是,FileModifiedDT
变量始终显示为当前时间,尽管文件之前已被修改。
FILETIME lastWriteTime;
String * FileNamePtr = new String( FileName );
GetFileTime( FileNamePtr, NULL, NULL, &lastWriteTime );
SYSTEMTIME systemTime;
FileTimeToSystemTime( &lastWriteTime, &systemTime );
TDateTime * FileModifiedDT = new TDateTime( systemTime.wYear, systemTime.wMonth,
systemTime.wDay, systemTime.wHour,
systemTime.wMinute, systemTime.wSecond,
systemTime.wMilliseconds );
我是不是在某种程度上误用了 GetFileTime
?有没有更好的方法来解决这个问题?
错误是
String * FileNamePtr = new String( FileName );
GetFileTime( FileNamePtr, NULL, NULL, &lastWriteTime );
根据 documentation,第一个参数必须是 CreateFile
创建的文件句柄,不能是其他任何东西。
因此你需要这样的东西:
HANDLE fileHandle = CreateFile(
FileName, //LPCTSTR
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if ( fileHandle != INVALID_HANDLE )
{
GetFileTime( fileHandle, NULL, NULL, &lastWriteTime );
CloseHandle( fileHandle );
}
else
{
// error, do something else...
}
我需要将文件的最后修改时间与数据库中存储的日期时间进行比较。我最初查看 this question 开始。
我目前正在为文件的最后一次写入获取 FILETIME
,将其转换为 SYSTEMTIME
。然后我使用 SYSTEMTIME
创建一个 TDateTime
对象,我可以用它来进行比较。但是,FileModifiedDT
变量始终显示为当前时间,尽管文件之前已被修改。
FILETIME lastWriteTime;
String * FileNamePtr = new String( FileName );
GetFileTime( FileNamePtr, NULL, NULL, &lastWriteTime );
SYSTEMTIME systemTime;
FileTimeToSystemTime( &lastWriteTime, &systemTime );
TDateTime * FileModifiedDT = new TDateTime( systemTime.wYear, systemTime.wMonth,
systemTime.wDay, systemTime.wHour,
systemTime.wMinute, systemTime.wSecond,
systemTime.wMilliseconds );
我是不是在某种程度上误用了 GetFileTime
?有没有更好的方法来解决这个问题?
错误是
String * FileNamePtr = new String( FileName );
GetFileTime( FileNamePtr, NULL, NULL, &lastWriteTime );
根据 documentation,第一个参数必须是 CreateFile
创建的文件句柄,不能是其他任何东西。
因此你需要这样的东西:
HANDLE fileHandle = CreateFile(
FileName, //LPCTSTR
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL
);
if ( fileHandle != INVALID_HANDLE )
{
GetFileTime( fileHandle, NULL, NULL, &lastWriteTime );
CloseHandle( fileHandle );
}
else
{
// error, do something else...
}