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.IOAPI,例如:

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

因为您应该运行 shell 以将 glob 模式扩展/tmp/output*为有序的文件路径数组。

您可以sh -c "rm /tmp/output*"作为 Mono 进程运行,但这很难看

但是你不需要外壳。例如,您可以使用mono readdir构建要删除的文件路径的数组(或列表),然后通过调用执行unlink(2)系统调用的函数来删除它们(我让您找到如何在 Mono 中执行此操作)。

于 2012-12-14T21:15:54.507 回答