【发布时间】:2015-10-13 23:07:46
【问题描述】:
我需要将文件的最后修改时间与存储在数据库中的日期时间进行比较。我最初查看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?有没有更好的方法可以解决这个问题?
【问题讨论】:
-
你在哪个windows系统上?
-
GetFileTime成功了吗?试试if(....) -
GetFileTime:"如果函数失败,返回值为零。要获取扩展错误信息,请调用GetLastError。"
-
是的。您需要传递从对
CreateFile的调用中获得的HANDLE,而不是路径名。 -
附带说明,停止对不需要的类型使用指针:
String sFileName = FileName; ... TDateTime FileModifiedDT( systemTime.wYear, systemTime.wMonth, systemTime.wDay, systemTime.wHour, systemTime.wMinute, systemTime.wSecond, systemTime.wMilliseconds );。在将SYSTEMTIME转换为TDateTime的情况下,RTL 有一个SystemTimeToDateTime()函数:TDateTime FileModifiedDT = SystemTimeToDateTime( systemTime );
标签: c++ datetime winapi windows-8.1 c++builder-xe7