2

FO_MOVE操作でWindows SHFileOperation関数を使用するコードがありました。指定された追加のフラグは FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_SILENT。

宛先ドライブがいっぱいになると、特定の奇妙な動作が観察されました。この場合、MOVE はファイルを宛先フォルダーに配置できませんでしたが、ソース ファイルも失われました。これは非常に予期せぬことであり、これによりデータが失われました。

これは SHFileOperation の標準的な動作ですか? 宛先ドライブに空き容量がある場合、MOVE のようなものを用意できますか?そうでない場合は、ファイルを元の場所に残しますか?

4

2 に答える 2

0

私はこれについて聞いたことがありません - バグのように聞こえます。

移動操作を FO_COPY に分割し、その後に FO_DELETE を実行する (FO_COPY 操作が成功したと仮定して) という、より実用的なアプローチを選択するのが最適な場合があります。

さらに、ソース ボリュームと宛先ボリュームが同じであることを実装で検出できれば、ある程度の効率が得られる可能性があります。この場合、FO_MOVE に戻せるはずです。通常、同じボリュームでの移動操作は、名前の変更とメタデータの移動に要約されます。

于 2010-08-02T17:53:47.103 に答える
0

宛先ファイルが宛先メディアまたはファイル システムに対して大きすぎる場合、SHFileOperation は DE_FILE_TOO_LARGE (0x85) を返す必要があります。

于 2010-08-03T00:44:45.273 に答える