ログ ファイルをコピーするスクリプトを作成しています。コピーする前に、ログ ファイルが書き込まれていないことを確認したいと考えています。
ファイルを開こうとして、このケースをチェックすることになっている関数を作成しました。別のアプリケーションでファイルが開かれている場合、関数は $oFile.Open 呼び出しでこの状態を検出すると想定されています。
メモ帳でテスト ファイルを開いてこの関数をテストし、関数を実行しましたが、問題は報告されませんでした。つまり、$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