ネットワーク共有でファイルを移動する際のパフォーマンスの問題
-
27-09-2019 - |
質問
ネットワーク共有にファイルをコピーできるアプリケーションを書いています。通常、ファイルは同じ物理ハードドライブで移動されます。 Windows Explorerでこれをテストすると、この操作は非常に迅速に実行されます。 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 Explorerが使用する別のAPI関数はありますか?
簡単な比較のために:
- ファイル数:260
- 各ファイルのファイルサイズ:11 kb
- エクスプローラーでの移動時間:2秒
- Shfileoperationで移動する時間:20秒
開発システムでWindows 7を使用していますが、XPでも動作するはずなので、新しいIfileoperationインターフェイスを使用できません。
敬具
解決
シェルAPI関数を無視し、使用します MoveFileEx
また MoveFileWithProgress
直接。
所属していません StackOverflow