作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试比较本地文件和 ftp 服务器上的文件之间的文件写入时间。本地机器上的文件时间工作并且有意义,但是当我查看 ftp 服务器上的文件时,它显示两个不同的时间,通过 Windows 资源管理器和右键单击-> 属性。我发现了一个可行的 hack,并在我的代码中对其进行了评论。有什么帮助吗?我希望文件时间正确地相互关联。 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" ) );
最佳答案
SystemTimeToTzSpecificLocalTime( NULL, &stUTC1, &ftpFileWriteTime )
那是行不通的。您必须传递服务器 所在的时区,而不是您自己的时区。假设服务器甚至发送 UTC 时间戳,这在我上次放弃时并不常见。找出它所在的时区应该具有挑战性。 FTP 尚未成熟。
关于c++ - FTP 服务器上的写入时间很短,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3614066/
我遇到了一个奇怪的问题。我正在尝试使用 logcollector 从我的安卓手机收集一些日志或 aLogcat .我的 Nexus S 和 moto Defy 一切正常,但当我尝试从 Galaxy S
我有一部分正在工作,但我被告知如果条件 block 很短,我应该使用三元。 module PayerContractsHelper def showPayerContractRate(val)
我是一名优秀的程序员,十分优秀!