ネットワーク共有上のファイルをコピーできるアプリケーションを書いています。通常、ファイルは同じ物理ハードドライブに移動されます。これをWindowsエクスプローラーでテストすると、この操作は非常に迅速に実行されます。Windowsは同じ場所を認識しており、実際の移動を行い、コピーと削除は行わないようです(速度は遅くなります)。
ファイルのセットをコピーしたいとします。
\\computer\share\fileA.txt
\\computer\share\fileB.txt
宛先は次のとおりです。
\\computer\share\subfolder
アプリケーションはWindowsシェル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関数はありますか?
簡単な比較のために:
- ファイル数:260
- 各ファイルのファイルサイズ:11 kB
- エクスプローラーでの移動時間:2秒
- SHFILEOPERATIONで移動する時間:20秒
開発システムでWindows7を使用していますが、XPでも動作するはずなので、新しいIFileOperationインターフェイスを使用できません。
敬具