CFtpFileFind类遍历FTP目录文件数限制的有关问题,十万级以上,FindFile延迟如何解决

CFtpFileFind类遍历FTP目录文件数限制的问题,十万级以上,FindFile延迟怎么解决
本帖最后由 tussxx 于 2015-04-21 11:06:10 编辑
最近做的一个接口,需要从一个FTP目录下载大量图片数据,某某原因就不说了,反正就是根目录下直接来106万张图片,大概每张250k左右,windows资源管理器访问FTP时都打不开。
实现方式如下:

m_ftp_connect->GetCurrentDirectory(cur_path);
m_log->WriteLog(kLogInfo,"开始遍历源FTP目录:%s", cur_path.GetBuffer());

DWORD beginTm  = ::GetTickCount();
CFtpFileFind finder(m_ftp_connect);
BOOL bWorking=finder.FindFile("*.*");

while (bWorking)
{
bWorking = finder.FindNextFile();
DWORD endTm = ::GetTickCount() - beginTm;
if (finder.IsDots() ) 
continue;
         //........
}


 定位后发现卡在FindFile()这个位置不动。

自己在本地模拟环境时尝试了在根目录下放了约12W图片,27G,得到的endTm值大概在17000~24000之间。这意味着在现场环境下这种遍历方式会卡在这里更长时间。
大家有没有啥好的解决方案或者对这种状况的比较好的解释?

------解决思路----------------------
system("dir /b /a-d c:\\*.* >d:\\allfiles.txt");
//读文件d:\\allfiles.txt的内容即C:\\下所有文件的名字
system("dir /b /a-d /s c:\\*.* >d:\\allfilesinsub.txt");
//读文件d:\\allfilesinsub.txt的内容即C:\\下所有文件的名字包含子目录
system("dir /b /ad  c:\\*.* >d:\\alldirs.txt");
//读文件d:\\alldirs.txt的内容即C:\\下所有子目录的名字
请记住,能用shell命令获取文件、文件夹信息或者操作文件、文件夹最好用shell命令获取或者操作,而不要用各种API获取或者操作,因为当遇到非法文件夹名或非法文件名或非法文件长度、非法文件日期、压缩文件、链接文件、稀疏文件……等各种意料之外的情况时,API会处理的不全面或陷入死循环,而shell命令不会。