2

このコードを実行した後、「foo」ディレクトリが残っていない場合があります。

string folder = Path.Combine(Path.GetTempPath(), "foo");
if (!Directory.Exists(folder))
    Directory.CreateDirectory(folder);
Process.Start(@"c:\windows\explorer.exe", folder);
Thread.Sleep(TimeSpan.FromSeconds(5));
Directory.Delete(folder, false);
Directory.CreateDirectory(folder);

Windows エクスプローラーはフォルダーへの参照を保持しているように見えるため、最後の CreateDirectory は関係ありませんが、元のフォルダーは削除されます。コードを修正するにはどうすればよいですか?

編集:私の質問が明確ではなくて申し訳ありません。私の目的は、空の「foo」ディレクトリを作成することです。ディレクトリが既に存在する場合は、削除して新しく作成します。問題は、Windows エクスプローラーがディレクトリを参照している場合、CreateDirectory 呼び出しがサイレントに失敗することがあるということです。例外は発生しません。ディレクトリは作成されていません。

上記のコードは、私のコンピューターで問題を再現します。最後の 2 行のみが実際のアプリケーションに属します。前の行がセットアップされます。コードを実行した後、「foo」は常に存在しますか? これは、私のPCでは半分の時間ではありません。

とりあえず、fooの各ファイルとサブディレクトリを手動で削除しています。

4

1 に答える 1

1

詳細(例外、エラーなど)を提供しなかったため、これが問題であると想定します。

問題は、フォルダーを削除するコマンドを実行したときにエクスプローラーがまだ実行されていることだと思います。これはロックの問題である可能性があります。

Directory.Delete(folder, false);

それか、偶然にそのフォルダまたはそのサブフォルダまたはファイルにアクセスする他のアプリケーションがあります。

可能であれば、エクスプローラーやその他のアプリを介してフォルダーに触れないことをお勧めします。フォルダーを削除する前に、エクスプローラーが終了するのを待ってください。

        Process p = Process.Start(@"c:\windows\explorer.exe", folder);
        Thread.Sleep(TimeSpan.FromSeconds(5));
        p.WaitForExit(); //<-------
        Directory.Delete(folder, false);

また、スローされた例外とエラーを無視せず、存在する場合はここに貼り付けてください。

それが役に立てば幸い。

于 2010-04-27T06:12:38.490 に答える