0

ネットワーク共有上のファイルをコピーできるアプリケーションを書いています。通常、ファイルは同じ物理ハードドライブに移動されます。これを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インターフェイスを使用できません。

敬具

4

1 に答える 1

1

シェルAPI関数を無視して、MoveFileExまたはMoveFileWithProgress直接使用します。

于 2010-08-10T14:09:48.957 に答える