2010-08-31 3 views
0

im пытается сравнить время записи файла между локальным файлом и файлом на ftp-сервере. время файла на локальной машине работает, и это имеет смысл, но когда я смотрю на файл на ftp-сервере, он показывает два разных раза, через проводник Windows и свойства rightclick->. Я узнал, что работает хак, и его комментарий в моем коде. Любая помощь? Я хочу, чтобы время файла соответствовало друг другу правильно. MFC, C++, Windows 7 32bit, VS 2008время записи на FTP-сервере очень не работает

Код:

  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")); 
+0

Как работает «взлом»? Ваш комментарий не очень полезен. –

ответ

1

SystemTimeToTzSpecificLocalTime (NULL, & stUTC1, & ftpFileWriteTime)

Это не работает. Вам придется пройти часовой пояс, в котором живет сервер, а не ваш часовой пояс. Предполагая, что сервер даже отправляет отметки времени в формате UTC, это было нечасто в последний раз, когда я сдался. Выяснить, в какой временной зоне он живет, должно быть сложным. FTP не созрел хорошо.

+0

спасибо за сообщение. Я попытаюсь выяснить, где живет сервер. – TheFuzz