最近需要在Windows下拷贝大量小文件(数量在十万级别以上)。写了些拷贝文件的小程序,竟然发现不同的选择,拷贝的速度有天壤之别!
现有这样的测试数据:1500+小文件,总大小10M左右。现用不同方法进行拷贝。:
方案1:调用SHFileOperation
BOOL CUtility::CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
{
size_t nLengthFrm = _tcslen(lpszFromPath);
TCHAR *NewPathFrm = new TCHAR[nLengthFrm+2];
_tcscpy(NewPathFrm,lpszFromPath);
NewPathFrm[nLengthFrm] = '\0';
NewPathFrm[nLengthFrm+1] = '\0';
SHFILEOPSTRUCT FileOp;
ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
FileOp.fFlags = FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NOERRORUI|FOF_FILESONLY|FOF_NOCOPYSECURITYATTRIBS ;
FileOp.hNameMappings = NULL;
FileOp.hwnd = NULL;
FileOp.lpszProgressTitle = NULL;
FileOp.pFrom = NewPathFrm;
FileOp.pTo = lpszToPath;
FileOp.wFunc = FO_COPY;
return return SHFileOperation(&FileOp);
}
代码比较罗索。复制完成用时:57,923毫秒。
方案2:调用API:CopyFile
BOOL CUtility::CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
{
return CopyFile(lpszFromPath, lpszToPath, TRUE);
}
代码短小精悍。复制用时:700毫秒。
方案3:调用CMD命令。
BOOL CUtility::CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
{
TCHAR tbuff[255];
char buff[255];
_stprintf(tbuff, _T("copy /Y %s %s"), lpszFromPath, lpszToPath);
TChar2Char(tbuff, buff, 255);
system(buff);
return TRUE;
}
跑到5分钟后直接卡死。。没有得出结果,可能是参数传递的问题。
分享到:
相关推荐
window系统下,根据文本内容文件列表查找并拷贝出来
MFC Windows 程序设计之文件拷贝与进度展示,适合初学MFC的小伙伴学习研究,博客中有对应的讲解和演示,避免走弯路,费时费力。也真心希望能够帮助正在苦学MFC Windows 程序设计的小伙伴们,你们的成长是我最大的...
8、程序拷贝文件时意外终止,可以坚持mycopy.ini文件中的[系统状态]是否有“半个文件”,如果有说明“运行信息”中包含的文件没有拷贝完整。 9、如果因为某种原因错过了任务执行时机的话,拷贝程序会在启动后补回...
一个拷贝文件夹和子文件夹下文件并重命名的程序
《mfc windows程序设计(第2版)》见解深刻,并附带有辅助学习的资源——包括在随附的cd-rom中提供了大量代码实例。 要理解如何利用mfc库中提供的成千上万的预编译、预测试的代码的优点,本书——及其作者——将...
26/在Snapshot目录中拷贝如下文件到“C:/Windows/tmp”目录 _REGISTRY_USER_.DEFAULT _REGISTRY_MACHINE_SECURITY _REGISTRY_MACHINE_SOFTWARE _REGISTRY_MACHINE_SYSTEM _REGISTRY_MACHINE_SAM 27/将“C:/Windows...
一个C#实现的文件拷贝的windows窗体应用程序,适合新手了解文件操作
VC++ 功能完备的录音机程序 VC++模仿Windows而写的功能完备的录音机程序,该录音机可以录制指定输入的声音,详细...编译运行时请将MP3Enc.dll文件拷贝至Debug目录中。录音程序保存文件格式为MP3,还可以编辑MP3标签信息
理解DirectX API 支持基于Win16和MS-DOS的应用程序 NT的DOS虚拟机(NTVDM)简介 Win32环境下的Win16 简介 运行多NTVDM 在OS/2子系统中运行应用程序 OS/2的CONFIG.SYS文件 运行Presentatin Manager 理解Windows NT...
Windows 提供的DLL 文件中包含了允许基于Windows 的程序在Windows 环境下操作的许多函数和资源。动态链接提供了一种方法,使进程可以 调用不属于其可执行代码的函数。这些函数的可执行代码位于一个DLL 中,该DLL ...
FastCopy 是 Windows 平台上最快的文件拷贝、删除软件,它支持 UNICODE 和超过 MAX_PATH (260 个字符)的文件路径名。由于其功能强劲,性能优越,一时间便超越相同类型的所有其他软件。由于该软件十分小巧,你甚至...
如果你的程序缺少: libatomic-1.dll libgcc_s_seh-1.dll libgomp-1.dll libquadmath-0.dll ...里面的任何一个文件导致无法运行,试试下载这个,并把你需要的DLL拷贝到exe目录或C:\Windows\System32 GNU GCC 10.3.0
3.拷贝fr.rar iconv.rar中文件到c:\windows\system32 4.到doxygen安装目录中bin目录下,运行doxywizard.exe生成Doxyfile文件。 5.在同一个目录下建立Src、Doc目录,把fish.rar中doc目录下的批处理文件放到刚建立的...
强行关闭程序,拷贝到 99% 的文件突然丢失了。唉...这个 “瘟都死”,害人不浅哪!你长叹了一口气,有没有更好的办法呢?有,当然有了,支持文件拷贝断点续传的软件目前倒有几个。先推荐一款,Total Copy,这是我...
内容索引:VC/C++源码,界面编程,Loading,进度条 VC++实现类似Windows拷贝文件一样的进度条,进度条主要是使用图标完成的,这是与其它Loading有所不同的地方,本程序的图标有点吓人,你可以找些好看的适合做Loading的...
public boolean copy(String file1,String file2){ //拷贝文件方法 try{ java.io.File fileIn=new java.io.File(file1); //用路径名生成源文件 java.io.File fileOut=new java.io.File(...
Var.bat 文件中的相关目录名称。 2. 代码维护工具 每个例子都包括了描述编译、链接方法的 makefile 文件, 使用 nmake 工具可以自动根据此文件进行编译链接,nmake 工 具可以从 Visual C++ 的 bin 目录中找到,也...
Windows环境下32位汇编语言程序设计 第2版(罗文斌) 完整光盘内容,包含每章内容的完整代码 本光盘所包含目录的说明 根目录下的 *.pdf ;附录A、B、C的电子版文档 Chapter02\Test ;测试编译环境 Chapter03\Hello...
使用方法:把scr格式的文件拷贝到windows系统的windows\system32中即可,然后就可以在”桌面>设置>屏幕保护程序”中找到,windows10在任务栏搜索“屏幕保护”就找到屏幕保护程序设置。 ------------------------- ...
DELPHI专题文档-程序应用 更改Windows95的墙纸 类似于VB中的doevents功能 DELPHI下的多线程程序设计 用Delphi 3.0编制MP3音乐点歌台 ...如何将你的程序放在Windows启动中 获取当前程序的目录