我正在写一些Perl,它需要在Windows Media Center上记录电视节目,并根据特定标准移动/重命名/删除它们。确定一个文件是否在Windows的Perl中使用
由于Perl运行相当频繁,我想干净地确定文件是否在使用中(换句话说,该节目正在被录制过程中),所以我可以避免对它做任何事情。
我现在的方法查看文件的状态(使用“STAT”),并在5秒后,再进行比较,如下所示:
sub file_in_use
{
my $file = shift;
my @before = stat($file);
sleep 5;
my @after = stat($file);
return 0 if ($before ~~ $after);
return 1;
}
看来工作,但我Concious酒店有这可能是一个更好和更干净的方式来做到这一点。
你能提供建议吗?
这是一个很好的计算策略它和我不相信你会发现许多选择......另一种方式是通过阅读应用程序的pid和移动文件,一旦pid已经关闭... – Prix 2010-07-10 17:45:36
从Prix(我认为这是重要的点):*如果文件全时使用并且未发布,则不能对文件执行移动[或删除],因为它会产生错误... *。 (根据不同的文件模式设置,副本可能工作)。即使采用stat方法,您也必须*仍然*处理FS场景并仅将'file_in_use'用作'提示'(尽管潜在的竞争条件可能永远不会实现这里)。 – 2010-07-10 18:44:29
@pst真,这就是为什么我认为移动是一个很好的方式去...因为如果文件仍然锁定它将返回0或告诉你一个错误取决于你如何编码它,你可以继续尝试,直到它被释放或如此... – Prix 2010-07-10 19:06:31