删除包含项目的目录

时间:2012-06-11 11:15:48

标签: c# directory cmd

我正在尝试使用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.

我在我的智慧结束。我确实认为我在正确的轨道上。也许上面的代码只需要一些调整。任何帮助表示赞赏。

由于 Ĵ

3 个答案:

答案 0 :(得分:8)

只需使用Directory.Delete(string, bool)

虽然低级文件系统API当然要求你先确保目录是空的,但任何抽象它们的半框架都允许你做一个递归删除。事实上,这种方法的存在将是我在尝试使用外部程序之前检查的第一件事

答案 1 :(得分:5)

如果您想使用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);

答案 2 :(得分:4)

del.Start();
del.WaitForExit();

你没有启动这个过程所以它没有PID所以它会死掉