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"));
Comment fonctionne le "hack"? Ton commentaire n'est pas très utile. –