作者:
srxrrr (幹!我是肌董)
2014-11-07 12:01:50開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
VS2010
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
MFC
問題(Question):
各位版友好!
最近在試著使用MFC裡的CFtpConnection類別來使用FTP Client端功能
但在使用下載檔案的CFtpConnection::GetFile卻發現了一個問題
在執行程式時 第一次使用 檔案可以正確下載
但如果Server端檔案內容有修改後 再按下載
產生的檔案卻還是第一次所下載的舊內容@@
更誇張的是 就算直接把Server端檔案砍掉
在Client端再按一次下載 還是會下載東西下來= =
其內容也為第一次所下載的檔案內容Orz
整個誤動作...
*****************************已解決********************************
謝謝serikafan大的熱心協助 幫我找出問題!
在此小整理一下 給碰到相同問題的版友!
原來是cache(快取?)在搞鬼!
下載第一次後 就將該資訊存在Client端的cache裡
再次下載時 由於沒有比對機制判斷是否是內容有更新
所以實際上還是從cache裡抓資訊來給我
所以需要加入比對機制!
GetFile()的參數:dwFlags
需要再加入INTERNET_FLAG_RELOAD(每次都重新下載Server端檔案)
或 INTERNET_FLAG_RESYNCHRONIZE(如果Server端檔案有更新則下載)
二者都可以 依需求而定@@
*******************************************************************
下面的程式碼有加入修改後的code
main code:
CInternetSession *InternetSession;
CFtpConnection *m_pFtpConnection;
void CFTP_testDlg::OnBnClickedButtonConnect()
{
CString sServerIP, sUser, sPassword;
sServerIP=_T("192.168.7.123");
sUser=_T("kobe");
sPassword=_T("kobe");
InternetSession = new CInternetSession(_T("My Ftp Session"));
m_pFtpConnection =
InternetSession->GetFtpConnection(sServerIP,sUser,sPassword,21,true);
//Passive FTP
}
void CFTP_testDlg::OnBnClickedButtonGetFile()
{
bool bGetFile=false;
//原本無法更新的指令:
//bGetFile=m_pFtpConnection->GetFile(_T("Server.ini")
// ,_T(".//Download.ini"),false);
//修改後 可以更新的指令:
bGetFile=m_pFtpConnection->GetFile(_T("RemoteSetting//Server.ini")
,_T(".//Server.ini")
,false
,FILE_ATTRIBUTE_NORMAL
,FTP_TRANSFER_TYPE_BINARY|INTERNET_FLAG_RELOAD
);
if(bGetFile)
MessageBox(_T("Download Succeed!"),_T("Info"), MB_OK);
else
MessageBox(_T("Download Fail!"),_T("Info"), MB_OK);
}
另外 在code裡使用bGetFile來判斷是否可下載檔案
在程式第一次執行時 一樣可正常動作
(Server端檔案存在 bGetFile就會顯示true 否則為flase)
但下載過一次後 就算把Server端檔案刪去 按下載 bGetFile還是會顯示true...
一直找不出問題在哪>_<
希望有使用過此功能的熱心版友能提供點建議
謝謝您的協助!!