我正在寫一些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