删除包含项目的目录

问题描述 投票:0回答:4

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

我确实认为我走在正确的道路上;也许上面的代码只需要一些调整。

c# directory cmd
4个回答
9
投票

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

虽然低级文件系统 API 当然要求您首先确保目录为空,但任何抽象它们的半体面框架都允许您执行递归删除。事实上,在尝试诉诸外部程序之前,我首先要检查的是是否存在这样的方法


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);
    

4
投票
del.Start(); del.WaitForExit();

你没有启动进程,所以它没有 PID,所以它死掉了


0
投票
ProcessStartInfo ps = new ProcessStartInfo(); ps.CreateNoWindow = true; ps.UseShellExecute = false; ps.FileName = "cmd"; ps.WindowStyle = ProcessWindowStyle.Hidden; ps.Arguments = "/c rmdir /s/q \"C:\\Program Files (x86)\\Qmuzik32\""; ps.RedirectStandardOutput = true; string output = proc.StandardOutput.ReadToEnd(); proc.WaitForExit();
如果任何文件包含只读文件,则

Directory.Delete(path, true)

不起作用。仅像这样使用 
rmdir
 才会删除该目录及其所有内容。

© www.soinside.com 2019 - 2024. All rights reserved.