2010-08-31 6 views
0

im essayant de comparer les temps d'écriture de fichiers entre un fichier local et un fichier sur un serveur ftp. les heures de fichier sur la machine locale fonctionnent et cela a du sens, mais quand je regarde le fichier sur le serveur FTP, il montre deux fois différentes, via Windows Explorer et rightclick-> propriétés. J'ai découvert un hack qui fonctionne et son commenté dans mon code. De l'aide? Je veux que les temps de fichier se rapportent correctement les uns aux autres. MFC, C++, Windows 7 32bit, VS 2008écrire temps sur le serveur FTP est très

code:

  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

Comment fonctionne le "hack"? Ton commentaire n'est pas très utile. –

Répondre

1

SystemTimeToTzSpecificLocalTime (NULL, & stUTC1, & ftpFileWriteTime)

qui ne fonctionne pas. Vous devez passer le fuseau horaire dans lequel le serveur vit, pas votre propre fuseau horaire. En supposant que le serveur envoie même des horodatages UTC, ce n'était pas courant la dernière fois que j'ai abandonné. Trouver quel fuseau horaire il vit doit être difficile. Le FTP n'a pas bien mûri.

+0

merci pour le poste. Je vais essayer de savoir où le serveur vit. – TheFuzz

Questions connexes