2015-04-01 124 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 
} 
相关问题