在C/C++中至少有两种复制文件的方法:程序性地使用ShellExecute。如果需要,我可以发布解释,但我会假设这些方法是已知的。使用一种方法比另一种方法有优势吗?程序复制文件与使用ShellExecute和cp之间的权衡是什么?
0
A
回答
3
程序上会给你更好的错误检查/报告,并将跨平台工作 - ShellExecute只是Windows API。
您还可以使用第三方文件系统库来减少烦人的任务 - boost :: filesystem是一个不错的选择。
3
手动方法使您可以完全控制如何检测和响应错误。你可以编写不同的访问控制响应,空间不足,来自外星人的敌对文件等等。如果您调用ShellExec(或其他平台上的道德等价物),则会在stderr上留下错误消息。对于带有Window-ed UI的应用程序来说不是太热。
1
为什么像系统内置程序()/的ShellExecute不能使用:
- 程序将无法独立于平台
- 这些函数每次调用创建一个单独的执行单元
优点:
- 代码已经过很好的测试,所以更可靠
在这种情况下,经过良好测试的库是更合乎需要的库。
1
应该避免调用外部应用程序,因为经常(特别是在Windows下)它们不会返回容易理解的错误代码并以不希望的方式报告错误(stdout,error windows,...)。此外,您不能完全控制副本,而仅仅为了执行文件副本而启动新的应用程序往往是过度的,特别是在像Windows这样的平台上,其中进程是相当重量级的对象。
一个很好的折衷可能是使用您的操作系统为您提供的API(例如Windows上的CopyFile),它可以为您提供可靠的工作代码和定义良好的错误代码。但是,如果你想跨平台经常做最简单的事情就是编写你自己的拷贝代码:毕竟它不是火箭科学,它是一个简单的任务,可以在几行标准中完成C++代码。
1
在使用shell的情况下,您正在获得OS供应商实现的功能的最佳可用实现的便利性,其代价是增加了跨进程集成的复杂性。考虑处理错误,文件操作的异步性质,意外丢失返回错误级别,对完成进度的控制有限或不存在,无法响应“中止”/“重试”/“继续”交互式请求等。
相关问题
- 1. 历史推送和替换之间的权衡是什么?
- 2. 在执行排序和使用优先队列之间的Kruskal算法之间的权衡是什么?
- 3. 使用GetPrimitiveArrayCritical和Get <PrimitiveType> ArrayRegion之间的权衡是什么?
- 4. 当复制文件夹和整个子树cp和rsync之间的区别是什么
- 5. iOS应用程序中的LaTex,MathML和XHTMLMathML之间的权衡?
- 6. WinExec和ShellExecute之间的区别是什么?
- 7. IPC与进程之间的ShellExecute
- 8. PowerShell命令,-r和-p是什么意思? cp -r和cp -recurse之间的区别是什么
- 9. 重复使用游标与创建新游标的权衡是什么?
- 10. 使用cp(unix)复制文件,但跳过无法复制的文件
- 11. cp复制wxPython空间
- 12. maven和我的应用程序之间的连接是什么?
- 13. Bundler和Rails应用程序之间的关系是什么?
- 14. 什么是网络和iOS应用程序之间的关系
- 15. 什么是猫文件和猫之间的差异<文件
- 16. Eclipse .classpath文件和build.xml文件之间的关系是什么?
- 17. 是什么应用程序之间(“东西”)和Session(“东西”)
- 18. 使用reset_session vs session [:user_id] = nil的权衡是什么?
- 19. 创建新复合指数与添加现有指标的权衡是什么?
- 20. 之间是什么真正使文件和ln差异-s
- 21. Dockerfile无法复制文件。 (“cp”命令)
- 22. salt-cp错误/超时复制文件
- 23. 是什么文字/ javascript和应用程序/ JavaScript之间的差异
- 24. PHP在邮件()和SMTP之间使用的原因是什么?
- 25. 建筑设计之间的权衡
- 26. java -cp与java -jar之间的区别
- 27. 为什么程序运行时间不是衡量标准?
- 28. 小程序和SWING之间的区别是什么?
- 29. 在Applet和其他应用程序之间复制和粘贴
- 30. 复制过程中分离大文件的条件是什么?
你最好解释一下为什么你会考虑使用ShellExecute。而“程序性”也是不明确的。你的意思是'打开file1进行阅读,文件2进行写作; while(read(file1,buf)){write(file2,buf); ''?或者只是'SHFileOperation()'? – MSalters 2009-11-23 09:28:52
我的意思是程序上使用C库。 – zooropa 2009-11-23 12:09:37