性能的问题时,移动的文件在网络共享
-
27-09-2019 - |
题
我正在写一个应用程序,它可以复制文件上的一个网络分享。通常的文件移到相同物理的硬盘驱动器。如果你的测试这个Windows资源管理器,这种操作将是执行真的很快。现在看来,这Windows知道关于同一位置,并且不会一个真正的运动并不是一个副本,并删除(这将是速度较慢).
让我们说你想要复制一组文件:
\\computer\share\fileA.txt
\\computer\share\fileB.txt
目的是例如:
\\computer\share\subfolder
该应用程序使用的Windows壳API(I写的应用程序在德尔斐,但是问题应该以相同于其他语言):
with SHFileOpStruct do
begin
Wnd := 0;
wFunc := FO_MOVE;
pFrom := PChar ('\\computer\share\fileA.txt'+#0
+'\\computer\share\fileB.txt'+ #0#0);
pTo := PCahr ('\\computer\share\subfolder' + #0#0);
fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
end;
Result := SHFileOperationW (SHFileOpStruct);
不幸的是,这个代码做一个"复制,并删除"其速度慢得多大的文件,或者如果你有很多的文件。我如何可以避免这种情况?是否有任何方式来告诉移动操作,文件夹是在同一个硬盘驱动器?也许还有其他一些符号表示网络的道路。
或者是有一个不同的API function其是使用通过窗户浏览器?
对于一个短暂的比较:
- 数量的文件:260
- 文件大小的每个文件:11kB
- 时间移动资源管理器:2秒
- 时间用于移动与SHFILEOPERATION:20秒
我使用的Windows7月,我的发展系统,但它也应该在工作XP,因此我不能使用的新IFileOperation接口。
亲切的问候
解决方案
我会忽略壳API功能,和使用 MoveFileEx
或 MoveFileWithProgress
直接。
不隶属于 StackOverflow