Мне нужно сравнить время последнего изменения файла с датой, хранящейся в базе данных. Я изначально смотрел на этот вопрос для начала.
Я сейчас получаю 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 );
Согласно документация, первый аргумент должен быть дескриптором файла, созданным 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...
}