繁体   English   中英

使用cmd.exe执行DEL命令的代码将永远存在

[英]The code to execute DEL command using cmd.exe is taking forever

我想删除C#应用程序中临时文件夹中的所有* .tmp文件。

使用cmd.exe执行DEL命令的代码将永远存在。 它永远停留在Process.WaitForExit()并且Process.HasExited保持为false。 但是如果在cmd中手动使用,相同的命令运行良好:

DEL /Q /F "C:\Users\WinUser\AppData\Local\Temp\abc\*.tmp"

码:

Process Process = new Process();

Process.StartInfo.FileName = "cmd.exe";
Process.StartInfo.Arguments = " DEL /Q /C /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";
Process.StartInfo.CreateNoWindow = true;
Process.StartInfo.UseShellExecute = false;
Process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;

Process.Start();

Process.WaitForExit();

while (!Process.HasExited)
{
    MessageBox.Show("Error");
}

**注意:我的错误是我在DEL之后使用/ C并且正确的命令行是:

Process.StartInfo.Arguments = " cmd /C DEL /Q /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";

不过,我将切换到下面提到的基于.NET框架的删除代码。 但我最初选择了基于命令行(cmd.exe)的操作,因为Process.WaitForExit()在执行时不会挂起程序。 我在删除操作中要删除1000多个文件。

您需要在参数中添加/ C:

Process.StartInfo.Arguments = "/C DEL /Q /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";

否则它只会运行cmd.exe而永远不会退出。

不要使用shell out(使用Process对象)来执行可以使用本机.Net对象执行的操作。

DirectoryInfo tempDir = new DirectoryInfo("C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\");

foreach (FileInfo tempFile in tempDir.GetFiles())
{
    tempFile.Delete();
}

看到:

我宁愿这样做:

string[] files = Directory.GetFiles("C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc", "*.tmp");

foreach (string filename in files)
    File.Delete(filename);

因为.Net具有同等的功能

此外,使用SearchOption.AllDirectories也可以删除所有子目录"*.tmp"文件。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM