質問

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top