2015-10-07 88 views
-1

我有一個小型腳本可以從要將文件複製到特定文件夾的目錄中讀取。我的腳本將從文件中讀取並檢查我們是否收到所有已成功複製的文件。如何檢查文件是否已在Windows環境中使用

只要接收到所有文件,下一組作業就會被觸發,處理這些文件。

我使用的是正常Input操作來讀取文件:

if(open(FILE,abc.txt)) 
    print "it opened \n"; 
} else { 
    print "it did not open \n"; 
} 

上述方法沒有工作,也讀寫(+<)沒有工作。爲什麼?

+4

'use strict;使用警告;' – mob

+0

有什麼問題? –

+0

這些文件被ftp編輯到該文件夾​​中。所以我想考慮一個文件已經收到,只有當文件已經完成複製到文件夾。我想如果我打開一個文件,當它被複制到(使用時)打開將不允許。但是我可以在使用文件時打開。我想驗證.. – Deepak

回答

1

試試這個,如果你想檢查文件是否存在:

if (-e 'abc.txt') 
{ 
    print "file exists\n"; 
} 

如果你正在尋找檢查文件是否可進行讀/寫訪問(即確保另一進程寫入該文件是不沒有Windows環境中的鎖)最粗暴您可以搭乘無法打開文件條件:

open(INFO,  "+<datafile") || warn("can't open datafile: $!"); 

在windows我相信Determine whether a file is in use in Perl on Windows討論如何捕捉但是未能出現一個小的原油。

該方法在https://stackoverflow.com/a/4200474/5182165看起來更令我滿意。

我會建議看看fileno()或fcntl或在您的搜索中包含lsof以獲取更多詳細信息。

您可能也想看看作爲http://docs.activestate.com/activeperl/5.8/lib/pods/perlopentut.html#file_locking

描述另一個有趣的方法來監視使用Win32 :: ChangeNotify文件更改目錄作爲Windows - Using perl monitor a directory for a new file drop/creation

討論或者你可以使用羊羣() Win32 :: File :: Object檢查文件是否具有OFFLINE狀態http://codeverge.com/perl.beginners/win32-file-attribs-example/144600

+0

我其實想檢查文件是否已完全複製到驅動器中。所以我試圖打開文件來檢查文件是否仍在使用中(複製時),但即使文件被複制到該文件夾​​中(甚至文件正在使用中),我也可以打開文件... 。我想有一個驗證,只有當文件已成功複製到該位置我應該考慮使用該文件.... – Deepak

+0

不確定你的用例是什麼,但它也聽起來像你可能通過看東西如https://en.wikipedia.org/wiki/CwRsync –

相關問題