最近需要在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. ZooKeeper简单使用

    原文:ZooKeeper简单使用 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/u012055638/article/details/8066811 ...

  2. 在Android实现client授权

    OAuth对你的数据和服务正在变成实际上的同意訪问协议在没有分享用户password. 实际上全部的有名公司像Twitter.Google,Yahoo或者LinkedIn已经实现了它.在全部流行的程序 ...

  3. Android推送进阶课程学习笔记

    今天在慕课网学习了Android进阶课程推送的server端处理回执的消息 . 这集课程主要介绍了,当server往client推送消息的时候,client须要发送一个回执回来确认收到了推送消息才算一 ...

  4. 历届图灵奖 (Turing award)得奖名单

    历届图灵奖 (Turing award)得奖名单 一.总结 一句话总结:各个方面都有. 二.历届图灵奖 (Turing award)得奖名单 Turing奖最早设立于1966年,是美国计算机协会在计算 ...

  5. js进阶 9 js操作表单知识点总结

    js进阶 9 js操作表单知识点总结 一.总结 一句话总结:熟记较常用的知识点,对于一些不太常用的知识点可以在使用的时候查阅相关资料,在使用和练习中去记忆. 1.表单中学到的元素的两个对象集合石什么? ...

  6. 课堂随笔02--c#中string作为引用类型的特殊性

    using System; namespace Test { class Test1 { static void Main(string[] args) { string str1 = "1 ...

  7. 图片拉伸:IOS开发UIImage中stretchableImageWithLeftCapWidth

    意思就是用来创建一个内容可拉伸,而边角不拉伸的图片,需要两个参数,第一个是左边不拉伸区域的宽度,第二个参数是上面不拉伸的高度.那么接下来的一个像素会被拉伸.例如,leftCapHeight为6,top ...

  8. HDU1074 Doing Home Work - 状压dp

    传送门 题目大意: 有n(\(\le 15\))个作业,每个作业有个name, deadline(截止日期),cost(做作业花的时间),如果没有按时完成某个作业,惩罚分数为超出的时间,求一个合理的顺 ...

  9. js中多层复杂并且动态键值JSON的获取方法

    开发中遇到了用js解析重新组装json数据的要求,关键点在于JSON中的串的键是动态的,多方查找解决了在此做个记录.同时我也深感js中循环的无赖,如果用i作为键会得到索引,用key作为循环变量竟然可以 ...

  10. Swift语言实现代理传值

    需求:利用代理实现反响传值(下面样例採用点击第二个视图控制器中的button来改变第一个视图控制器中的Label的内容) 一.创建RootViewController import Foundatio ...