开发平台(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...
一直找不出问题在哪>_<
希望有使用过此功能的热心版友能提供点建议
谢谢您的协助!!