我想删除C#应用程序中临时文件夹中的所有* .tmp文件。
使用cmd.exe执行DEL命令的代码将永远存在。它始终保持Process.WaitForExit()
,Process.HasExited
仍为假。但是如果在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多个文件。
答案 0 :(得分:8)
您需要在参数中添加/ C:
Process.StartInfo.Arguments = "/C DEL /Q /F \"C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\*.tmp\"";
否则它只会运行cmd.exe而永远不会退出。
答案 1 :(得分:4)
不要使用shell(使用Process对象)来执行可以对原生.Net对象执行的操作。
DirectoryInfo tempDir = new DirectoryInfo("C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc\\");
foreach (FileInfo tempFile in tempDir.GetFiles())
{
tempFile.Delete();
}
请参阅:
答案 2 :(得分:1)
我宁愿这样做:
string[] files = Directory.GetFiles("C:\\Users\\WinUser\\AppData\\Local\\Temp\\abc", "*.tmp");
foreach (string filename in files)
File.Delete(filename);
因为.Net具有相同的功能
同样使用SearchOption.AllDirectories
所有子目录"*.tmp"
文件也可以删除。