ローカルファイルとftpサーバー上のファイルのファイル書き込み時間を比較しようとしています。ローカルマシンでのファイル時間は機能し、それは理にかなっていますが、ftpサーバーでファイルを見ると、Windowsエクスプローラーと右クリック->プロパティを介して2つの異なる時間が表示されます。私はうまくいくハックを見つけ、それが私のコードにコメントされました。何か助けはありますか?ファイル時間は互いに正しく関連している必要があります。MFC、C ++、Windows 7 32ビット、VS 2008
コード:
HINTERNET xmlHandle = NULL;
WIN32_FIND_DATA ftpFileData;
// find the file on the ftp server
xmlHandle = FtpFindFirstFile( m_ftpHandle, _T("TPCFeed.xml"), &ftpFileData, INTERNET_FLAG_RELOAD, 0 );
if( NULL != xmlHandle )
{
//-----------------------------------------------------------------------------------
// get the write time of the ftp file
SYSTEMTIME ftpFileWriteTime,
stUTC1;
FILETIME ftp;
FileTimeToSystemTime( &ftpFileData.ftLastWriteTime, &stUTC1 );
SystemTimeToTzSpecificLocalTime( NULL, &stUTC1, &ftpFileWriteTime );
// ----- HACK -------------------------------------------
ftpFileWriteTime.wHour += 4; // this hack works
SystemTimeToFileTime( &ftpFileWriteTime, &ftp );
//-----------------------------------------------------------------------------------
// get the write time of the local file
HANDLE localFileHandle = NULL;
localFileHandle = CreateFile( _T(_XML_FILENAME_PATH), FILE_READ_ATTRIBUTES,
FILE_SHARE_READ, NULL, OPEN_EXISTING,
NULL, NULL );
if( INVALID_HANDLE_VALUE != localFileHandle )
{
// get local file time
FILETIME localFileWriteTime,
local;
GetFileTime( localFileHandle, NULL, NULL, &localFileWriteTime );
SYSTEMTIME localFileWriteTime1,
stUTC;
FileTimeToSystemTime( &localFileWriteTime, &stUTC );
SystemTimeToTzSpecificLocalTime( NULL, &stUTC, &localFileWriteTime1 );
SystemTimeToFileTime( &localFileWriteTime1, &local );
//-----------------------------------------------------------------------------------
int timeResult = CompareFileTime( &ftp, &local );
if( -1 == timeResult )
AfxMessageBox( _T( "file on disk is later than ftp file, no need to download anything" ) );
else if( 0 == timeResult )
AfxMessageBox( _T( "times are equal!" ) );
else if( 1 == timeResult )
AfxMessageBox( _T( "file on ftp server is later than file on disk" ) );