0

ローカルファイルと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" ) );
4

1 に答える 1

1

SystemTimeToTzSpecificLocalTime(NULL、&stUTC1、&ftpFileWriteTime)

それはうまくいきません。自分のタイムゾーンではなく、サーバーが存在するタイムゾーンを通過する必要があります。サーバーがUTCタイムスタンプを送信することさえあると仮定すると、それは私が最後にそれをあきらめたときは一般的ではありませんでした。それがどのタイムゾーンにあるかを見つけるのは難しいはずです。FTPは十分に成熟していません。

于 2010-09-01T00:10:18.560 に答える