📄 ftpupdate.cpp
字号:
//绊积沁促... --+++
//FtpFindFirstFile 捞 窃荐绰 (滴锅掳 牢磊俊 公均阑 持电..) 公炼扒 泅犁 技泼等 叼泛配府狼 力老霉锅掳 颇老(肚绰 叼泛配府)
//捞抚阑 啊瘤绊 柯促. 霉锅掳 颇老(叼泛配府) 沥焊绰 wfd俊 历厘等促.
//颇老捞 绝栏搁 NULL 捞 府畔等促.
HINTERNET hFind = ::FtpFindFirstFile(m_hFTP_CONNECTION, "*.*", &wfd, 0, 0);
if( hFind == NULL )
{
INT iErrno = GetLastError();
if (iErrno != ERROR_INTERNET_EXTENDED_ERROR)
{
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, iErrno);
return -1; //勤甸俊 巩力啊 乐绰 版快捞促.
}
}
else
{
BOOL bRet = FALSE;
do
{
// 盔拜瘤狼 颇老捞抚苞, 泅犁 茫篮 颇老捞抚捞 鞍促搁...
if( strcmp(wfd.cFileName, pszRemoteFile) == 0 )
{
dwFileLength = wfd.nFileSizeLow;
fileTime = wfd.ftLastWriteTime;
bRet = TRUE;
break;
}
}while( bRet = InternetFindNextFile( hFind, &wfd ) );
if(bRet == FALSE) //颇老阑 茫瘤 给茄版快
{
if( ERROR_NO_MORE_FILES == GetLastError() )
{
TCHAR szMsg[128];
_snprintf( szMsg, 128, "%s 颇老捞 绝嚼聪促.", pszRemoteFile );
MessageBox( NULL, szMsg, NULL, MB_OK );
}
return FALSE;
}
else // 颇老篮 茫疽绰单..
{
if( wfd.dwFileAttributes != FILE_ATTRIBUTE_NORMAL )
{
char szError[128];
wsprintf(szError, "滚傈沥焊 颇老阑 佬阑荐 绝嚼聪促. 颇老 加己 = %d", wfd.dwFileAttributes );
MessageBox( NULL, szError, NULL, MB_OK );
InternetCloseHandle(hFind);
return FALSE;
}
}
InternetCloseHandle(hFind);
}
return TRUE;
}
WZ_DECLAREDLL HINTERNET CWZFtpUpdateModule::OpenRemoteFile(const char* pszRemoteFile)
{
HINTERNET hRemoteFile;
INT iCount = MAX_RETRY_DOWNLOADING;
while(iCount--)
{
hRemoteFile = ::FtpOpenFile(m_hFTP_CONNECTION, pszRemoteFile, GENERIC_READ, FTP_TRANSFER_TYPE_BINARY |
INTERNET_FLAG_RELOAD | INTERNET_FLAG_DONT_CACHE, 0);//(DWORD)this);
if( hRemoteFile == NULL )
{
// 俊矾
m_strtUpdatingFileInfo.iErrorCode = GetLastError();
Sleep(100);
}
else
{
break;
}
}
if( iCount < 1 )
{
// 颇老阑 茫阑荐 绝促.
AddEvent( EVENT_FILE_NOTFOUND );
return NULL;
}
return hRemoteFile;
}
//盔拜瘤俊 乐绰 颇老阑 啊廉柯促.(促款肺靛 茄促.)
WZ_DECLAREDLL eRESULT_CONSTANT CWZFtpUpdateModule::GetRemoteFile(const HINTERNET hRemoteFile, const HANDLE hLocalFile, DWORD dwFileLength)
{
DWORD dwNowRecvBytes, dwNowWrittenBytes, dwTotalWrittenBytes;
dwNowRecvBytes = dwNowWrittenBytes = dwTotalWrittenBytes = 0;
m_strtUpdatingFileInfo.uWholeFileSize = dwFileLength;
m_strtUpdatingFileInfo.uNowFileSize = 0;
int nZeroCount = 0;
if(dwFileLength > 0)
{
while(TRUE)
{
if ( !InternetReadFile(hRemoteFile, m_FTP_cBUFFER, sizeof(m_FTP_cBUFFER), &dwNowRecvBytes) )
{
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
MessageBox (HWND_DESKTOP, "InternetReadFile() error", "俊矾俊矾", MB_OK);
ZeroMemory( m_FTP_cBUFFER, MAX_BUFFER );
return RESULT_DOWNLOAD_FAIL;
}
if( dwNowRecvBytes == 0)
nZeroCount++;
if( nZeroCount >= 2)
{
AddEvent( EVENT_FILEDOWNLOAD_FAIL );
return RESULT_DOWNLOAD_FAIL;
}
// 父老 捞 风凭阑 角青窍绰 档吝俊 FTP辑滚客 楷搬捞 谗绢瘤搁, 历 窃荐俊辑 FALSE甫 府畔窍绰 巴捞
// 酒聪扼, dwNowRecvBytes啊 0捞 府畔等促. 弊贰档, 俊矾啊 酒匆荐档 乐栏骨肺, 2锅 0捞 唱坷搁,
// 风凭阑 狐廉 唱坷绰 巴栏肺 茄促.
if ( !WriteFile (hLocalFile, m_FTP_cBUFFER, dwNowRecvBytes, &dwNowWrittenBytes, NULL) )
{
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
MessageBox (HWND_DESKTOP, "WriteFile() error", "俊矾俊矾", MB_OK);
return RESULT_DOWNLOAD_FAIL;
}
dwTotalWrittenBytes += dwNowWrittenBytes;
m_strtUpdatingFileInfo.uNowFileSize = dwTotalWrittenBytes;
AddEvent( EVENT_FILEDOWNLOAD_WORKING );
// 泅犁鳖瘤 静咯柳 颇老狼 侩樊捞 傈眉 颇老狼 侩樊焊促 鞍芭唱 农促搁...
if ( dwTotalWrittenBytes >= dwFileLength)
break;
if( m_bCancelUpdate )
{
m_bCancelUpdate = FALSE;
return RESULT_DOWNLOAD_STOP;
}
}
}
else if(dwFileLength == 0)
{
return RESULT_DOWNLOAD_SUCCESS;
}
else
{
// 盔拜瘤 颇老 农扁啊 0焊促 累促.
SetLastErrorMsg(CWZUpdateModule::ERROR_SYSTEM, GetLastError());
return RESULT_DOWNLOAD_FAIL;
}
return RESULT_DOWNLOAD_SUCCESS;
}
//颇老 府胶飘俊 乐绰 颇老甸阑 促款 罐绰促.
//盔贰 府胶飘颇老 捞抚篮 绊沥牢单.. 弊成 牢磊肺 结霖促.
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::DownloadFilesOnFileList( char* pszRemoteDirPath )
{
// 肺拿俊 府胶飘 颇老阑 促款 罐疽栏搁, 馆靛矫 角青颇老 版肺俊 乐促. 蝶扼辑 捞抚父 结霖促.
if(( SMDFile = fopen( DEFAULT_FILELIST_FILE, "r" ) ) == NULL )
{
MessageBox (HWND_DESKTOP, "can't open update-list file", "error", MB_OK | MB_ICONERROR);
return FALSE;
}
string strLocalRelativeDirPath; //肺拿 历厘 叼泛配府 惑措版肺
// 颇老 府胶飘甫 盒籍秦辑, 颇老 府胶飘俊 乐绰 颇老甸阑 促款 罐绰 备巩..
while( TRUE )
{
SMDToken Token;
//GetToken窍霸 登搁 SMDFile俊 沥狼等 颇老阑 佬绢辑 Token苞 TokenString俊 蔼阑 府畔窍霸 等促.
Token = (*GetToken)();
if( Token == END )
break;
if( Token == NAME ) // 颇老捞抚牢 版快
{
// 盔拜瘤 龋胶飘狼 傈眉版肺捞抚
CHAR szCurrentRemoteFilePath[MAX_PATH];
ZeroMemory( szCurrentRemoteFilePath, MAX_PATH );
wsprintf(szCurrentRemoteFilePath, "%s\\%s", pszRemoteDirPath, TokenString);
string strAbsoluteDirPath;
GetLocalDownAbsoluteDir( strLocalRelativeDirPath, strAbsoluteDirPath ) ;
//////////////////////////////////////////////////////////////////////////
// 泅犁 捞 颇老阑 促款 罐篮利捞 乐绰瘤 眉农..
// 1. 辑滚颇老苞 度鞍篮 肺拿颇老捞 乐绰瘤 眉农
string strLocalFilePath;
strLocalFilePath = strAbsoluteDirPath;
strLocalFilePath += TokenString;
BOOL bRet = CanDownloadFile( strLocalFilePath, TokenString );
if(bRet == TRUE) //促款肺靛 秦档 等促搁..
{
if ( !DownloadFile(szCurrentRemoteFilePath, const_cast<char*>(strAbsoluteDirPath.data()) ) )
return FALSE;
}
else //促款肺靛 窍瘤 臼酒档 等促搁.. 捞固 瘤抄锅俊 促款 罐篮 颇老捞促.
continue;
// 颇老 促款肺靛啊 己傍沁栏骨肺 颇老 俺荐甫 窍唱 刘啊矫难 霖促.
m_strtUpdatingFileInfo.uNowFileNum++;
}
if( Token == NUMBER ) // 弃歹捞抚牢 版快
{
// 0捞搁 弃歹甫 积己窍扼绰 疙飞捞骨肺, 0 促澜俊 唱坷绰 蔼阑 佬绢具 茄促.
// 弊 蔼捞 弃歹 疙捞促.
Token = (*GetToken)();
strLocalRelativeDirPath = "\\";
strLocalRelativeDirPath += TokenString;
string strAbsoluteDirPath;
GetLocalDownAbsoluteDir( strLocalRelativeDirPath, strAbsoluteDirPath ) ;
CreateDirectory (strAbsoluteDirPath.data(), NULL); // 肺拿 叼泛配府 积己
}
}
return TRUE;
}
//肺拿 颇老苞 辑滚颇老阑 厚背窍咯 促款 罐阑瘤 救 罐阑瘤甫 搬沥茄促.
//TRUE : 颇老阑 促款 罐绰促.
//FALSE : 颇老阑 促款 罐瘤 臼绰促.
WZ_DECLAREDLL BOOL CWZFtpUpdateModule::CanDownloadFile(string strLocalFilePath, string strRemoteFileName)
{
//////////////////////////////////////////////////////////////////////////
// 泅犁 捞 颇老阑 促款 罐篮利捞 乐绰瘤 眉农..
// 1. 辑滚颇老苞 度鞍篮 肺拿颇老捞 乐绰瘤 眉农
HANDLE hFile = CreateFile( strLocalFilePath.data(), GENERIC_READ, FILE_SHARE_READ,
NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if( hFile != INVALID_HANDLE_VALUE ) //颇老捞 粮犁茄促.
{
// 2. 盔拜瘤 颇老 沥焊
DWORD dwFileLength;
FILETIME fileTime, localFileTime;
GetRemoteFileInfo( strRemoteFileName.data(), dwFileLength, fileTime);
//3. 肺拿颇老 沥焊 佬绢坷扁
GetFileTime( hFile, NULL, NULL, &localFileTime );
// 沥焊甫 促 佬菌栏聪, 勤甸阑 摧绰促.
CloseHandle( hFile );
// 滴 颇老狼 矫埃捞 悼老窍瘤 臼促.
if( ( fileTime.dwHighDateTime != localFileTime.dwHighDateTime ) ||
( fileTime.dwLowDateTime != localFileTime.dwLowDateTime ) )
{
return TRUE;
}
else //矫埃付廉 悼老窍促搁... 颇老狼 农扁 厚背
{
FILE* pFile = fopen(strLocalFilePath.data(), "r");
long nLen = _filelength( _fileno(pFile) );
fclose(pFile);
return FALSE;
if( nLen == dwFileLength) //颇老狼 农扁啊 鞍促搁..
return FALSE; //颇老阑 促款 罐瘤 臼绰促.
else
return TRUE;
}
}
else //颇老捞 粮犁 窍瘤 臼栏搁..
{
return TRUE;
}
//////////////////////////////////////////////////////////////////////////
}
//辑滚客狼 楷搬 惑怕甫 眉农窍绰 静饭靛
//楷搬阑 眉农窍绰 窃荐啊 绝扁 锭巩俊 泅犁 辑滚狼 叼泛配府甫 啊廉坷绰 窃荐肺 眉农茄促.
WZ_DECLAREDLL unsigned __stdcall CWZFtpUpdateModule::CheckConnectThread(LPVOID lpParam)
{
CWZFtpUpdateModule* lpWZUM = (CWZFtpUpdateModule*) lpParam;
while( lpWZUM->m_bConnected )
{
Sleep(1000);
HINTERNET hConnection = InternetConnect( lpWZUM->m_hINET_SESSION, lpWZUM->m_szIPADDR, lpWZUM->m_wPORT,
lpWZUM->m_szID, lpWZUM->m_szPASS, INTERNET_SERVICE_FTP, INTERNET_FLAG_PASSIVE, 0);
if (hConnection == NULL) //Ftp俊 楷搬且荐 绝嚼聪促.
{
lpWZUM->m_bConnected = FALSE;
char szError[512];
wsprintf( szError, "辑滚客 楷搬且荐 绝嚼聪促. ErrorCode = %d", GetLastError() );
MessageBox(NULL, szError, "舅覆", MB_OK);
lpWZUM->AddEvent( EVENT_DISCONNECT );
}
else
{
InternetCloseHandle( hConnection );
}
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -