0
我正在编写一个复制日志文件的脚本,我想确保日志文件在复制之前没有被写入。PowerShell 1 - 检查一个文件是否已被使用
我创建了一个应该通过尝试打开文件来检查这种情况的函数。假设是,如果另一个应用程序打开文件,该函数将在$ oFile.Open调用中检测到这种情况。
我通过在记事本中打开测试文件来测试此功能,然后运行该功能并且它没有报告任何问题。换句话说,即使文件已经在NotePad中打开,$ oFile.Open也会返回true。
有人能帮我理解这里发生了什么吗?
感谢
function isFileLocked([string]$Path) {
$oFile = New-Object System.IO.FileInfo $Path
### Make sure the path is good
if ((Test-Path -Path $Path) -eq $false)
{
echo "Bad Path"
return $false
}
#Try opening file
$oStream = $oFile.Open([System.IO.FileMode]::Open, [System.IO.FileAccess]::ReadWrite, [System.IO.FileShare]::None)
if ($oStream)
{
echo "Got valid stream so file must not be locked"
$oStream.Close()
return $false
} else {
echo "InValid stream so file is locked"
return $true
}
}
$file="C:\Users\Tom\Daily_Reviews_0001-1191.journal"
$result = isFileLocked($file)
echo $result