上次写FILETIME总是返回当前时间

Jam*_*gle 1 c++ winapi datetime windows-8.1 c++builder-xe7

我需要将文件的上次修改时间与存储在数据库中的日期时间进行比较.我最初看了这个问题才开始.

我目前正在获取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 );
Run Code Online (Sandbox Code Playgroud)

GetFileTime在某种程度上错过了吗?我还有更好的方法吗?

UmN*_*obe 5

错误是

String * FileNamePtr = new String( FileName );
GetFileTime( FileNamePtr, NULL, NULL, &lastWriteTime );
Run Code Online (Sandbox Code Playgroud)

根据文档,第一个参数必须是由其创建的文件句柄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...
}
Run Code Online (Sandbox Code Playgroud)