2014-05-09 64 views
2

我正在製作更新某些文件的Powershell(版本3.0,.Net框架4.5)腳本。但是,其中一些需要首先檢查。在Powershell中,如何在ZipFile.OpenRead之後關閉句柄?

我打開一個JAR文件,並得到一個條目的用下面的代碼內容:

[Reflection.Assembly]::LoadWithPartialName('System.IO.Compression.FileSystem') 
$zentry = [IO.Compression.ZipFile]::OpenRead($moduleJarPath).Entries | Where-Object {$_.FullName -match '.*pom.xml'} 

的入口是採用就是System.IO.StreamReader閱讀,在讀之後關閉,finally塊。

再往下看腳本,我將用更新的jar文件更新JAR文件,它可能具有相同的名稱。在這種情況下,該腳本失敗:

Copy-Item : The process cannot access the file 'E:\path\to\my\artifact.jar' because it is being used by another process. 

它看起來像鎖被我自己的腳本,這似乎是合乎邏輯的,因爲我剛剛訪問的JAR舉行。我想關閉句柄,以便我的腳本可以覆蓋JAR。

在IO.Compression.ZipFile documentation中,沒有「close」方法。

如何解鎖?

謝謝! :)

回答

9

ZipArchive,由ZipFile.OpenRead()返回,執行IDisposable,因此您可以撥打Dispose()

$zipFile = [IO.Compression.ZipFile]::OpenRead($moduleJarPath) 
$zentry = $zipFile.Entries | Where-Object {$_.FullName -match '.*pom.xml'} 
... 
$zipFile.Dispose() 
+0

完美,謝謝! –

相關問題