2010-08-10 115 views
0

我正在編寫可以在網絡共享上覆制文件的應用程序。通常這些文件在同一個物理硬盤上移動。如果您使用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); 

Unfortu最近這段代碼做了一個「複製和刪除」,這對大文件或者你有很多文件來說要慢得多。我怎樣才能避免這種情況?有什麼辦法可以告訴移動操作,這些文件夾在同一個硬盤上?也許網絡路徑還有其他一些符號。

或者是否有Windows資源管理器使用的不同API函數?

對於短的比較:

  • 數量的文件:11 KB
  • 時間舉動在資源管理器:2秒
  • 時間舉動260
  • 每個文件的文件大小與SHFILEOPERATION:20秒

我使用Windows 7上我的開發系統,但它應該也可以在XP中工作,所以我不能用我的新FileOperation界面。

親切的問候

+0

如果您首先映射共享的驅動器號,是否也會發生這種情況? – 2010-08-10 14:34:59

回答

1

我會忽略了殼的API函數,並直接使用MoveFileExMoveFileWithProgress

+0

這是否解決了網絡路徑問題? – 2010-08-10 14:13:23

+0

@Coco:我不完全確定它是否存在 - 但我的想法是,它很快就會很容易找到。 – 2010-08-10 15:23:41

+0

我會明天測試它並寫下我的反饋。 – 2010-08-10 15:29:05