我用CFtpConnection的GetFile下载文件,每隔5分钟下载相同文件名的文件。但是第二次
下载的文件和第一次下载文件的内容一样。可是直接用FTP客户端下载,文件内容就变了后改用CInternetFile类在FTP上打开文件,采用读取一部分内容,写入本地文件内容。发现25K的文件,只读取了12K,就结束了,代码如下 //打开FTP服务器上文件
CInternetFile *pInternetFile = pConn->OpenFile((LPCSTR)_strFileName, GENERIC_READ
,FTP_TRANSFER_TYPE_ASCII);
if (pInternetFile == NULL) {
strMessage.Format("%s 打开远端文件%s失败", strCurrentTime, _strFileName);
AddMessage(strMessage);
return bRet;
} CFile fLocal;
//以相同的文件名创建本地文件
if (!fLocal.Open(_strFileName, CFile::modeCreate | CFile::modeWrite, NULL)) {
strMessage.Format("%s 创建本地文件%s失败", strCurrentTime, _strFileName);
AddMessage(strMessage);
return bRet;
}
//将远端文件内容写入本地文件
char buffer[2048] = "\0";
int nBytesRead = 2048;
int nTotalLen = 0;
while (nBytesRead != 0) {
memset(buffer, 0x00, sizeof(buffer));
nBytesRead = pInternetFile->Read(buffer, 2047);
fLocal.Write(buffer, nBytesRead);
nTotalLen += nBytesRead;
}
请列位高手赐教 多谢了
下载的文件和第一次下载文件的内容一样。可是直接用FTP客户端下载,文件内容就变了后改用CInternetFile类在FTP上打开文件,采用读取一部分内容,写入本地文件内容。发现25K的文件,只读取了12K,就结束了,代码如下 //打开FTP服务器上文件
CInternetFile *pInternetFile = pConn->OpenFile((LPCSTR)_strFileName, GENERIC_READ
,FTP_TRANSFER_TYPE_ASCII);
if (pInternetFile == NULL) {
strMessage.Format("%s 打开远端文件%s失败", strCurrentTime, _strFileName);
AddMessage(strMessage);
return bRet;
} CFile fLocal;
//以相同的文件名创建本地文件
if (!fLocal.Open(_strFileName, CFile::modeCreate | CFile::modeWrite, NULL)) {
strMessage.Format("%s 创建本地文件%s失败", strCurrentTime, _strFileName);
AddMessage(strMessage);
return bRet;
}
//将远端文件内容写入本地文件
char buffer[2048] = "\0";
int nBytesRead = 2048;
int nTotalLen = 0;
while (nBytesRead != 0) {
memset(buffer, 0x00, sizeof(buffer));
nBytesRead = pInternetFile->Read(buffer, 2047);
fLocal.Write(buffer, nBytesRead);
nTotalLen += nBytesRead;
}
请列位高手赐教 多谢了
解决方案 »
- 请教,学习vc++2010那些教程较好
- windowless_richedit 插入图片的实现 了解的进!
- 怎样才能选中绘制出来的文本内容?
- 使用ADO访问远程ORACLE数据库
- 按钮名称后+(&字母) 产生快捷键原理
- 关于回调函数中访问成员变量的问题,具体内容见内……,急。
- 帮帮我吧!VC的问题
- 众位高手,怎么拦截别的程序的数据包阿?!(100分)
- VC编译器的BUG,后续, zwp771(),approach(),zhaolaoxin() 请进
- 请问:象账单等表格一样的东西用vc是怎么做出了的?(100分)
- 再次发贴询问List View问题,高手门进来留下email,我把demo版发到你们email,解决问题,100分送上!!!
- 用DirectSound播放wav文件的问题
int nPort,
CString &SerDirectory,
CString &LocDirectory,
CString &FileName,
CString &UserName,
CString &UserPassword)
{
//从指定的FTP服务器上指定的目录上下载指定的文件到本地机上指定的路径下
char szAppName[256];//应用程序名称
strcpy(szAppName,AfxGetAppName());//得到应用程序名称 BOOL result;//返回结果 HINTERNET hInetSession=InternetOpen(szAppName,INTERNET_OPEN_TYPE_PRECONFIG,NULL,NULL,0);
//建立INTERNET会话
HINTERNET hFtpConn=InternetConnect(hInetSession,FtpServerName,nPort,
UserName,UserPassword,INTERNET_SERVICE_FTP,INTERNET_FLAG_PASSIVE,0);
//建立FTP连接
if(!hFtpConn)
{
InternetCloseHandle(hInetSession);//关闭会话
return FALSE;//返回FALSE
}
FtpSetCurrentDirectory(hFtpConn,SerDirectory);//设置FTP当前工作目录
SetCurrentDirectory(LocDirectory);//设置本地当前工作目录
result=FALSE;
int retrytimes=0;//重试下载文件次数
while(result==FALSE && retrytimes<20)
{//如果下载结果为FALSE并且重试次数小于20,则执行下面循环
if(retrytimes>0)Sleep(20);
result=FtpGetFile(hFtpConn,FileName,LocDirectory+"\\"+FileName,FALSE,FILE_ATTRIBUTE_NORMAL,FTP_TRANSFER_TYPE_BINARY|
INTERNET_FLAG_NO_CACHE_WRITE,0)?TRUE:FALSE;
retrytimes++;
}
return result;
}