我正在尝试使用 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.
我确实认为我走在正确的道路上;也许上面的代码只需要一些调整。
只需使用 Directory.Delete(string, bool).
虽然低级文件系统 API 当然要求您首先确保目录为空,但任何抽象它们的半体面框架都允许您执行递归删除。事实上,在尝试诉诸外部程序之前,我首先要检查的是是否存在这样的方法。
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);
del.Start();
del.WaitForExit();
你没有启动进程,所以它没有 PID,所以它死掉了
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
才会删除该目录及其所有内容。