最近需要在Windows下拷贝大量小文件(数量在十万级别以上)。写了些拷贝文件的小程序,竟然发现不同的选择,拷贝的速度有天壤之别!

现有这样的测试数据:1500+小文件,总大小10M左右。现用不同方法进行拷贝。:

方案1:调用SHFileOperation

  1. BOOL CUtility::CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
  2. {
  3. size_t nLengthFrm = _tcslen(lpszFromPath);
  4. TCHAR *NewPathFrm = new TCHAR[nLengthFrm+2];
  5. _tcscpy(NewPathFrm,lpszFromPath);
  6. NewPathFrm[nLengthFrm] = '\0';
  7. NewPathFrm[nLengthFrm+1] = '\0';
  8. SHFILEOPSTRUCT FileOp;
  9. ZeroMemory((void*)&FileOp,sizeof(SHFILEOPSTRUCT));
  10. FileOp.fFlags = FOF_NOCONFIRMATION|FOF_NOCONFIRMMKDIR|FOF_NOERRORUI|FOF_FILESONLY|FOF_NOCOPYSECURITYATTRIBS ;
  11. FileOp.hNameMappings = NULL;
  12. FileOp.hwnd = NULL;
  13. FileOp.lpszProgressTitle = NULL;
  14. FileOp.pFrom = NewPathFrm;
  15. FileOp.pTo = lpszToPath;
  16. FileOp.wFunc = FO_COPY;
  17. return return SHFileOperation(&FileOp);
  18. }

代码比较罗索。复制完成用时:57,923毫秒。

方案2:调用API:CopyFile

  1. BOOL CUtility::CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
  2. {
  3. return CopyFile(lpszFromPath, lpszToPath, TRUE);
  4. }

代码短小精悍。复制用时:700毫秒。

方案3:调用CMD命令。

  1. BOOL CUtility::CopyFolder(LPCTSTR lpszFromPath,LPCTSTR lpszToPath)
  2. {
  3. TCHAR tbuff[255];
  4. char  buff[255];
  5. _stprintf(tbuff, _T("copy /Y %s %s"), lpszFromPath, lpszToPath);
  6. TChar2Char(tbuff, buff, 255);
  7. system(buff);
  8. return TRUE;
  9. }

跑到5分钟后直接卡死。。没有得出结果,可能是参数传递的问题。

http://blog.csdn.net/lsldd/article/details/8191338

windows程序中拷贝文件的选择的更多相关文章

  1. windows emacs 中拷贝文件

    cp d:/workspace/LoginWeb/target/LoginWeb.war D:/Program\ Files/apache-tomcat-7.0.78/webapps/LoginWeb ...

  2. [转]MSI安装程序中的文件替换

    原文链接:http://teach.hanzify.org/article/652-1233562028.html 前言 最近有汉化朋友问起如何不重新制作MSI文件,而直接用汉化好的文件替换MSI安装 ...

  3. [转]如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  4. []如何在Windows 10中更改文件夹背景颜色

    ini文件.我们甚至可以使用相同的技术将图片设置为文件夹背景. 已有工具可以更改Windows 7中Windows资源管理器背景的颜色,并将图像设置为Windows 7中的文件夹背景,但这些工具与Wi ...

  5. 如何把Windows主机中的文件拉到centOS虚拟机中

    如何把Windows主机中的文件拉到centOS虚拟机中 2017年02月19日 22:19:12 Ariel_lin2017 阅读数:6023 标签: vmware tools共享文件   之前写了 ...

  6. 小程序中搜索文件,阅览pdf,分享文件链接,评论表情符号

    小程序中搜索文件,阅览pdf,分享文件链接,评论表情符号 https://blog.csdn.net/hotqin888/article/details/84111389 小程序中打开网页和pdf h ...

  7. Kubernates之从pod中拷贝文件到宿主机

    想从k8s的pod中拷贝文件到宿主机,kubectl 的cp命令,但是网上搜索了下,感觉有点乱,自己记录下. hadoop这个namespace下,有个hadoop-hadoop-yarn-rm-0的 ...

  8. kubectl cp 从k8s pod 中 拷贝 文件到本地

    请查看官方的说明 kubectl cp --help 官方说使用cp , pod里需要有tar命令 从k8s pod 中 拷贝 文件到本地 这是我使用的命令 kubectl exec redis-6c ...

  9. 如何从GAC中拷贝文件出来 C:\Windows\assembly

    方法一:命令行拷贝. 开始--运行--cmd--"cd C:\WINDOWS\assembly".一般自己开发的dll都在GAC_MSIL这个文件夹下面,按照我如下的截图就可以拷贝 ...

随机推荐

  1. Windows Phone 8.1 联系人与日历

    (1)联系人(Manifest 获取权限) 1)获取联系人 获取联系人的方式有两种 A. ContactPicker ContactPicker 也就是直接打开一个系统的选择联系人界面,让用户选择,可 ...

  2. VBA Code for Word Navigation Pane 【failed】 view-showheading-method-word

    https://msdn.microsoft.com/VBA/Word-VBA/articles/view-showheading-method-word View.ShowHeading Metho ...

  3. 数据库基本查询语句(SQL常用增删改查语句 简单复习 mark)

    SQL常用增删改查语句 1增 1.1[插入单行]insert [into] <表名> (列名) values (列值)例:insert into Strdents (姓名,性别,出生日期) ...

  4. Android 仿微信朋友圈点击图片变暗

    package cn.eoe.leigo.view; import android.content.Context; import android.graphics.Bitmap; import an ...

  5. iOS 通讯录基础

    iOS  6 之后应用訪问通讯录须要获得用户授权,而且仅仅授权一次,即使卸载了之后再安装.也不用再次授权. 开发通讯录应用须要两个框架: 1.ABAddressBook    主要用于提供訪问通讯录中 ...

  6. erlang 中带下划线变量的使用

    在erlang里'_'是一个特殊的变量(其实erlang里不应该叫“变”量,照顾习惯,姑且这么叫吧),它可以代替任何东西,在match的时候非常有用,例如: {A, _, [B|_], {B}} =  ...

  7. Android studio 无法启动安卓模拟器

    1.通过Android SDK Manager在extra中,找到并选中了那个Intel x86 Emulator Accelerator (HAXM) 2.手动启动HAXM    去对应的sdk\e ...

  8. matlab、sklearn 中的数据预处理

    数据预处理(normalize.scale) 0. 使用 PCA 降维 matlab: [coeff, score] = pca(A); reducedDimension = coeff(:,1:5) ...

  9. 【37.00%】【vijos p1425】子串清除

    P1425子串清除Accepted 标签:[显示标签] 描述 我们定义字符串A是字符串B的子串当且仅当我们能在B串中找到A串.现在给你一个字符串A,和另外一个字符串B,要你每次从B串中从左至右找第一个 ...

  10. .NET CORE的TagHelper智能提示

    VisualStudio2017下ASP.NET CORE的TagHelper智能提示不能使用的解决办法   之前在VS2017RC中就发现该问题,安装了依赖,但是前段一直点不出来asp-for,后来 ...