PowerShell:读取在其他程序中打开的文件时出错
PowerShell: Error when reading files that are open in other programs
PowerShell 专家您好,
将文件添加到 Zip 文件时,下面的脚本片段有效。但是,如果要添加的文件在另一个程序中打开,则它会失败并出现异常,“进程无法访问文件 [..]”。我尝试使用 [IO.FileShare]::ReadWrite 但没有成功。
关于如何打开文件以读取和写入 zip 的任何建议,无论文件是否在另一个程序中打开?
# write entries with relative paths as names
foreach ($fname in $FullFilenames) {
$rname = $(Resolve-Path -Path $fname -Relative) -replace '\.\',''
Write-Output $rname
$zentry = $zip.CreateEntry($rname)
$zentryWriter = New-Object -TypeName System.IO.BinaryWriter $zentry.Open()
$zentryWriter.Write([System.IO.File]::ReadAllBytes($fname)) #FAILS HERE
$zentryWriter.Flush()
$zentryWriter.Close()
}
由于我们遗漏了您代码中的一些重要部分,我将假设在这种情况下可能有效,并根据您的意见做出假设。
首先,您将使用 FileShare.ReadWrite
:
打开文件
$handle = [System.IO.File]::Open($fname, 'Open', 'Read', 'ReadWrite')
那么你应该可以使用 .CopyTo(Stream)
method from FileStream
:
$zentry = $zip.CreateEntry($rname)
$zstream = $zentry.Open()
$handle.CopyTo($zstream)
$zstream.Flush()
$zstream.Dispose()
$handle.Dispose()
PowerShell 专家您好,
将文件添加到 Zip 文件时,下面的脚本片段有效。但是,如果要添加的文件在另一个程序中打开,则它会失败并出现异常,“进程无法访问文件 [..]”。我尝试使用 [IO.FileShare]::ReadWrite 但没有成功。
关于如何打开文件以读取和写入 zip 的任何建议,无论文件是否在另一个程序中打开?
# write entries with relative paths as names
foreach ($fname in $FullFilenames) {
$rname = $(Resolve-Path -Path $fname -Relative) -replace '\.\',''
Write-Output $rname
$zentry = $zip.CreateEntry($rname)
$zentryWriter = New-Object -TypeName System.IO.BinaryWriter $zentry.Open()
$zentryWriter.Write([System.IO.File]::ReadAllBytes($fname)) #FAILS HERE
$zentryWriter.Flush()
$zentryWriter.Close()
}
由于我们遗漏了您代码中的一些重要部分,我将假设在这种情况下可能有效,并根据您的意见做出假设。
首先,您将使用 FileShare.ReadWrite
:
$handle = [System.IO.File]::Open($fname, 'Open', 'Read', 'ReadWrite')
那么你应该可以使用 .CopyTo(Stream)
method from FileStream
:
$zentry = $zip.CreateEntry($rname)
$zstream = $zentry.Open()
$handle.CopyTo($zstream)
$zstream.Flush()
$zstream.Dispose()
$handle.Dispose()