Последняя запись FILETIME всегда возвращает текущее время

Мне нужно сравнить время последнего изменения файла с датой, хранящейся в базе данных. Я изначально посмотрел на этот вопрос, чтобы начать.

Я сейчас получаю 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 каким-то образом? Есть ли лучший способ, которым я должен идти об этом?

1 ответ

Решение

Ошибка

String * FileNamePtr = new String( FileName );
GetFileTime( FileNamePtr, NULL, NULL, &lastWriteTime );

Согласно документации, первым аргументом должен быть дескриптор файла, созданный 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...
}
Другие вопросы по тегам