2

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 Framework ベースの削除コードに切り替えます。Process.WaitForExit()しかし、実行中にプログラムがハングしないため、最初はコマンドライン (cmd.exe) ベースの操作を選択しました。削除操作で削除するファイルが 1000 個以上あります。

4

3 に答える 3

8

/C を引数に追加する必要があります。

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

それ以外の場合は、cmd.exe を実行するだけで終了しません。

于 2013-10-17T12:03:39.833 に答える