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"));
Как работает «взлом»? Ваш комментарий не очень полезен. –