作为项目的一部分,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*
(在用户模式下)时,该命令似乎没有识别文件的问题。
为什么这个命令不起作用?
答案 0 :(得分: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。
答案 1 :(得分:1)
因为您应该运行shell以将glob模式/tmp/output*
扩展为有序的文件路径数组。
您可以将sh -c "rm /tmp/output*"
作为Mono进程运行,但这很难看
但你不需要shell。例如,您可以使用mono readdir来构建要删除的文件路径的数组(或列表),然后通过调用执行unlink(2)系统调用的函数来删除它们(我将告诉您如何执行此操作)在Mono)。