我正在编写一个可以复制网络共享上的文件的应用程序。通常,文件在同一物理硬盘上移动。如果使用Windows资源管理器对此进行测试,则此操作将非常快速地执行。看起来,Windows知道相同的位置并进行真正的移动,而不是复制和删除(这会更慢)。
假设您要复制一组文件:
\\computer\share\fileA.txt
\\computer\share\fileB.txt
目的地是例如:
\\computer\share\subfolder
该应用程序使用Windows Shell API(我在Delphi中编写了应用程序,但问题也应该与其他语言相同):
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);
不幸的是,这段代码执行“复制和删除”,这对大文件或者如果你有很多文件要慢得多。我怎么能避免这个?有没有办法告诉移动操作,文件夹是在同一个硬盘上?也许网络路径还有其他一些表示法。
或者是否有Windows资源管理器使用的不同API函数?
进行简短比较:
我在我的开发系统上使用Windows 7,但它也适用于XP,因此我无法使用新的IFileOperation接口。
亲切的问候