2015-04-01 137 views
2

我有一個PowerShell代碼充當給定文件夾路徑上的文件偵聽器。聆聽者啓動一個命令行調用,以打開並播放該文件的另一個程序。Powershell - 檢查文件是否寫完

問題是,PowerShell代碼立即啓動命令行調用,如果任何文件被放入此文件夾。如果文件非常大(比如100 + mb),這是一個問題,因爲當一個人將文件複製到文件夾中時,當命令功能啓動並嘗試打開文件時,文件可能只有5%完成'寫入' (並失敗)。

有沒有在PowerShell中檢查文件是否仍在寫入的方法?這樣我可以建立一個循環,每隔x秒檢查一次,只有在寫入完成後才運行?

如果文件也被寫入,文件是否保持「鎖定」?這可以在Powershell中檢查嗎?

謝謝大家!

回答

3

可能有一個鎖定檢查可用System.IO.FileInfo或類似的地方,但我使用一個簡單的長度檢查。它進入被調用的腳本而不是文件觀察器腳本。

$LastLength = 1 
$NewLength = (Get-Item $FileName).length 
while ($NewLength -ne $LastLength) { 
    $LastLength = $NewLength 
    Start-Sleep -Seconds 60 
    $NewLength = (Get-Item $FileName).length 
} 
相關問題