-1

Windows API を使用して、多くのファイルとフォルダーを再帰的に削除しています。UIなしでエラーを抑えて使っています。問題は、これらのファイルのいずれかが使用中の場合、完全に失敗することです。私はその可能性を期待しており、そのようなケースを飛ばしてとにかくこれを続けてほしいと思っています。失敗する 1 つのファイルは、実際には、この削除コマンドを呼び出しているのと同じ EXE です (いずれにせよ、すべてが完了した後に削除されます。

これが私が今していることです:

procedure DeleteDirectory(const DirName: string);
var
  FileOp: TSHFileOpStruct;
begin
  FillChar(FileOp, SizeOf(FileOp), 0);
  FileOp.wFunc := FO_DELETE;
  FileOp.pFrom := PChar(DirName+#0);//double zero-terminated
  FileOp.fFlags := FOF_SILENT or FOF_NOERRORUI or FOF_NOCONFIRMATION;
  SHFileOperation(FileOp);
end;

使用中のファイルのイベントをスキップするにはどうすればよいですか? ドキュメントを見ましたが、これを行うことができるものは何も見つかりません。

4

2 に答える 2

0

これを試してみませんか:

procedure DeleteFiles(const DirName: String);
var
  SR: TSearchRec;
  i: Integer;
begin
  //get all files in directory
  i := FindFirst(DirName +'\*.*', faAnyFile, SR);

  while i = 0 do
  begin
    if (SR.Attr and faDirectory) <> faDirectory then
      DeleteFile(DirName +'\'+ SR.Name);

    i := FindNext(SR);
  end;

  FindClose(SR);
end;

それはそれを行う別の方法です。

于 2014-05-13T11:39:47.540 に答える