1

指定されたパラメーターのファイルとフォルダーを再帰的に削除する単純な (コンソール) スクリプトを C# で作成しました。例: delete_folder.exe "C:\test"

アンインストール中にこの小さなコードを使用して、アンインストール後に残りのファイルを削除します。コード自体は正常に動作しますが、次のエラーが表示されます。System.IO.IOException: The process cannot access the file 'C:\test\test2' because it is being used by another process.

このエラーの直前に、アンインストーラーが停止し、いくつかのサービス (インストーラーによって作成された) が削除されます。

Windows はまだフォルダーを使用しているようですtest2。私の質問は次のとおりです。フォルダーが別のプロセスで使用されているかどうかを確認する方法と、そのプロセスがそこにあるのを停止して、残りのフォルダーを削除できるようにする方法です。

コンソール アプリケーションは次のようになります。

class Program
    {
        public static void log(string t)
        {
            File.AppendAllText("C:\\testlog.txt", DateTime.Now.ToString() + "----" + t + "\r\n");
        }
        static void Main(string[] args)
        {
            try
            {
                string path = args[0];
                if (Directory.Exists(path) == true)
                {
                    Directory.Delete(path, true);
                }
                else
                {
                    Console.WriteLine("Dir not found!");
                }
            }
            catch (Exception ex)
            {
                log(ex.ToString());
            }
        }
    }
4

1 に答える 1

1

Atry...catchはあまり洗練されていないように聞こえるかもしれませんが (実際、アルゴリズムの通常のフローをこのステートメントに基づいて行うことは、ほとんどの場合お勧めできません)、ここを通過する唯一の方法のようです。System.IO要素が使用されているかどうかを示す (直接的な) プロパティはないことに注意してください。したがって、これに依存することは、この種の問題の通常の解決策です(使用中のファイルについての投稿)。サンプルコード:

foreach (string dir in System.IO.Directory.GetDirectories(rootDirectory))
{
    try
    {
        System.IO.Directory.Delete(dir);
    }
    catch
    {
        //There was a problem. Exit the loop?
    }
}
于 2013-10-04T08:10:45.663 に答える