1

ファイルの最終変更時刻をデータベースに保存されている日時と比較する必要があります。私は最初にこの質問を見て始めました。

現在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は何らかの方法で誤用していますか?これについてもっと良い方法はありますか?

4

1 に答える 1

6

エラーは

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...
}
于 2015-07-23T15:16:25.540 に答える