Powershell - 检查文件是否已完成写入

标签 powershell file-locking

我有一个 powershell 代码,它充当给定文件夹路径上的文件监听器。监听器启动对另一个打开并播放文件的程序的命令行调用。

问题在于,如果将任何文件放入此文件夹,powershell 代码会立即启动命令行调用。如果文件非常大(比如 100+mb),这是一个问题,因为当一个人将文件复制到文件夹中时,当命令功能启动并尝试打开文件时,文件可能只有 5% 完成“写入” (并失败)。

powershell中有没有办法检查文件是否仍在写入?这样我就可以建立一个循环,每 x 秒检查一次,并且只在写入完成后运行?

如果文件也被写入,它是否会保持“锁定”?这可以在Powershell中检查吗?

谢谢大家!

最佳答案

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
}

关于Powershell - 检查文件是否已完成写入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29394358/

相关文章:

java - 当应用程序意外退出时处理文件锁定

python - Python 中的持久内存

powershell - 拆分并将文本/数字添加到文件名

powershell - powershell 中是否有相当于 "this"的值?

php - 如何使用群()

java - 文件系统更新、锁定、计时问题

java - 在 Java 中,使用 java.nio 库和 FileChannel,如何从文件加载 Properties 对象?

正则表达式不适用于遗漏特定字符串

c# - 通过C#执行PowerShell函数脚本

visual-studio-2010 - 从包管理器控制台 (PowerShell) 添加自定义 nuget 提要