2

C#を使用してディレクトリを削除しようとしています。私が試した最初の方法は

Directory.Delete(@"C:\Program Files (x86)\Qmuzki32");

ディレクトリが空ではないという例外が発生します。次に、ディレクトリが空であるかどうかに関係なく、ディレクトリを静かに削除するために使用できるcmdコマンドを見つけました。cmdで次のコマンドを実行しました。

rmdir /s /q "C:/Program Files (x86)/Qmuzik32"

これはうまくいき、私が望んでいたことを正確に実行しました。私の最初の試みでは、次のようにこのコマンドをC#プロセスに組み込んでみました。

if (Directory.Exists(@"C:\Program Files (x86)\Qmuzik32"))
   {
       string sQM32Folder = @"C:\Program Files (x86)\Qmuzik32";
       Process del = new Process();
       del.StartInfo.FileName = "cmd.exe";
       del.StartInfo.Arguments = string.Format("rmdir /s /q \"{0}\"", sQM32Folder);
       del.WaitForExit();
   }

これは機能しなかったので、次のように試しました。

if (Directory.Exists(@"C:\Program Files (x86)\Qmuzik32"))
   {
       string sQM32Folder = @"C:\Program Files (x86)\Qmuzik32";
       Process del = new Process();
       del.StartInfo.FileName = "rmdir.exe";
       del.StartInfo.Arguments = string.Format("/s /q \"{0}\"", sQM32Folder);
       del.WaitForExit();
   }

同じ問題。例外が発生します:

No process is associated with this object.

私は正しい方向に進んでいると思います。たぶん、上記のコードは微調整が必​​要なだけです。

4

3 に答える 3

9

Directory.Delete(string、bool)を使用するだけです。

もちろん、低レベルのファイルシステムAPIでは、最初にディレクトリが空であることを確認する必要がありますが、それらを抽象化する中途半端なフレームワークでは、再帰的な削除を行うことができます。実際、そのようなメソッドの存在は、外部プログラムに頼る前に私が最初にチェックすることです。

于 2012-06-11T11:18:13.930 に答える
6

cmdの方法を使用する場合は、次のように使用できます。

ProcessStartInfo Info = new ProcessStartInfo(); 
Info.Arguments = "/C rd /s /q \"C:\\Program Files (x86)\\Qmuzik32\""; 
Info.WindowStyle = ProcessWindowStyle.Hidden; 
Info.CreateNoWindow = true; 
Info.FileName = "cmd.exe"; 
Process.Start(Info);
于 2012-06-11T11:23:49.307 に答える
4
del.Start();
del.WaitForExit();

プロセスを開始しなかったため、PIDがないため、終了します

于 2012-06-11T11:19:57.827 に答える