从FTP服务器上批量下载小文件的问题

华美乐章 2013-07-01 06:32:56
1.我现在批量从FTP服务器上下载N多小文件(大概6W多个文件),每个文件夹里面有10~20多个文件,使用递归遍历FTP上的文件,调用CFtpConnection::SetCurrentDirectory有时候会出错误(6W多个文件遍历下来需要1分钟的时间),错误码:12003,请问这个问题是什么导致的,如何解决呢?(1楼附上递归调用的源码)

2.开了5个线程去下载这6W多个文件,在调用pFtpConnection->GetFile(strRemoteFile,strLocalFile,FALSE)下载文件时,也会间接性的出错,GetLastError返回错误码:12031,查看MSDN http://support.microsoft.com/kb/193625 说是The connection with the server has been reset.难道是CInternetSession对象失效了?这个问题也不知道怎么解决?

有做过这方面的朋友,指点下经验 或者提供一些解决方案,非常感谢.
...全文
266 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
华美乐章 2013-07-08
  • 打赏
  • 举报
回复
引用 3 楼 edit89 的回复:
问题出现在服务器方面,对于服务器来说,在几秒或十几秒期间,满负荷传输数据没问题,长时间满负荷传输数据,一旦某个传输发生卡的情况,会瞬间疯狂传输数据,服务器一定出问题,所以不要满负荷传输数据,要等到对端确认后在发送下个包
这个问题已经解决了.
edit89 2013-07-07
  • 打赏
  • 举报
回复
问题出现在服务器方面,对于服务器来说,在几秒或十几秒期间,满负荷传输数据没问题,长时间满负荷传输数据,一旦某个传输发生卡的情况,会瞬间疯狂传输数据,服务器一定出问题,所以不要满负荷传输数据,要等到对端确认后在发送下个包
华美乐章 2013-07-02
  • 打赏
  • 举报
回复
顶,坐等高手.
华美乐章 2013-07-01
  • 打赏
  • 举报
回复
void  GetFtpServerFileList(CString strDir)
{
	CString FileName=_T("");
	CStringList List;
	if (!g_FtpInfo.pFtpConnection->SetCurrentDirectory(strDir))
	{
		DPIDebugPrintWithArgs(LOG_LEVEL_ERROR,"Exec SetCurrentDirectory'function is failed,Error:%d",GetLastError());
		return;
	}

	CFtpFileFind finder(g_FtpInfo.pFtpConnection);
	BOOL bFind=finder.FindFile(_T("*"));
	while (bFind)
	{
		bFind=finder.FindNextFile();
		if (finder.IsDots())
			continue;
		//不是文件夹的话
		if (!finder.IsDirectory())
		{
			//根据需要保存地址或做其他操作,这里保存的是文件在ftp服务器上的相对路径
			gFileArray.Add(finder.GetFilePath());
			continue;
		}
		else
		{
			//保存目录
			List.AddTail(finder.GetFilePath());
		}
	}
	//这个需要关闭,只能有一个CFtpFileFind
	finder.Close();

	while (List.IsEmpty()==FALSE)
	{
		strDir=List.RemoveHead();
		GetFtpServerFileList(strDir);
	}
}

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧