PowerShell:读取在其他程序中打开的文件时出错



你好PowerShell专家,

下面的脚本片段在向Zip文件中添加文件时起作用。但是,如果要添加的文件在另一个程序中打开,则会异常失败,"进程无法访问文件[…]"。我试过使用[IO]。FileShare]:: read - write but no success yet.

无论文件是否在另一个程序中打开,关于如何打开文件进行读写压缩的任何建议?

脚本来源
# 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')

那么您应该能够使用FileStream中的.CopyTo(Stream)方法:

$zentry  = $zip.CreateEntry($rname)
$zstream = $zentry.Open()
$handle.CopyTo($zstream)
$zstream.Flush()
$zstream.Dispose()
$handle.Dispose()

最新更新