是否有一个内置的cmdlet或一些组合,可以让我在下载每个块时开始解压缩文件流?我有一个PowerShell脚本,需要下载一个大(10 GB)文件,我必须等待,直到它现在完成,然后才开始扩展。
$wc = New-Object net.webclient
$wc.Downloadfile($appDataSnapshotUri, "%DataSnapshotFileName%.zip") # this can take some time
Expand-Archive -Path "%DataSnapshotFileName%.zip" -DestinationPath Run # so can this
2条答案
按热度按时间py49o6xq1#
好的,事实证明zip文件不需要完全下载才能解压缩,你可以压缩/解压缩流。.Net中有一些内置的流压缩功能,但它不适用于zip存档。你可以使用SharpZipLib库:
从https://www.nuget.org/packages/SharpZipLib/下载.nupckg将文件提取到任何文件夹。您将需要lib/net 45中的ICSharpCode.SharpZipLib.dll
下面是我对他们的例子的简化翻译:https://github.com/icsharpcode/SharpZipLib/wiki/Zip-Samples#unpack-a-zip-using-zipinputstream-eg-for-unseekable-input-streams
它只会提取第一个条目,你可以添加一个while循环,这个例子可以工作。
下面是一个使用while循环提取多个文件的代码片段(将其放在上面示例中的
$zipEntry = $zipInputStream.GetNextEntry()
之后):编辑
这是我发现的工作…
jk9hmnmh2#
为了扩展Mike Twc的答案,一个脚本可以在有和没有流的情况下完成它,并比较它需要多长时间: