0

プロジェクトの一環として、Mono プログラムは一連の画像をムービーに書き込む必要があります。したがって、画像は最初に/tmp/フォルダ/にキャッシュされます。これは、以前のセッションの静止画像である可能性があるためです。これらの画像を削除したいです。したがって、次のコマンドを使用します。

Process proc = new Process();
proc.EnableRaisingEvents = false;
proc.StartInfo.FileName = "rm";
proc.StartInfo.Arguments = "/tmp/output*";
proc.Start();
proc.WaitForExit();

ただし、プログラムを実行すると、次の警告が表示されます: /bin/rm: cannot remove '/tmp/output*': No such file or directory..

ただし/bin/rm /tmp/output*、ターミナルで(ユーザーモードで)実行すると、コマンドのファイル認識に問題は​​ないようです。

このコマンドが機能しないのはなぜですか?

4

2 に答える 2

3

このために外部プロセスを生成するのはひどいことです。System.IOたとえば、標準の API を使用するだけです。

foreach (var file in Directory.EnumerateFiles ("/tmp", "output*")) {
    try {
        File.Delete (file);
    } catch {
        ; // optionally report error
    }
}

引数を取るオーバーロードを使用してSearchOption、サブディレクトリを再帰的に検索することもできます。http://msdn.microsoft.com/en-us/library/dd383571.aspxを参照してください。

于 2012-12-14T21:38:13.587 に答える
1

シェルを実行して、glob パターン/tmp/output*を順序付けられたファイル パスの配列に展開する必要があるためです。

sh -c "rm /tmp/output*"Monoプロセスとして実行できますが、それは醜いです

しかし、シェルは必要ありません。たとえば、mono readdirを使用して削除するファイル パスの配列 (またはリスト) を作成し、 unlink(2) syscallを実行する関数を呼び出してそれらを削除することができます (Mono でそれを行う方法はお任せします)。

于 2012-12-14T21:15:54.507 に答える