DotNetZip v1.9のreadメソッドで日本語ファイル名を取り扱う方法(エンコード指定方法) @powershell

DotNetZip v1.9のReadメソッドにエンコードを渡す方法です。
ポイントは Ionic.Zip.ReadOptionsで、これのEncodingプロパティに932を指定し、Readメソッドの第二引数に指定します。
サンプルコード(powershell)

[CmdletBinding()]
Param(
    [string]
    $zipFilePath = ".\test.zip"
)
[void][System.Reflection.Assembly]::LoadFrom(".\Ionic.Zip.dll" )

$readOptions = New-Object Ionic.Zip.ReadOptions
$readOptions.Encoding = [System.Text.Encoding]::GetEncoding(932)
$zipfile = [Ionic.Zip.ZipFile]::Read($zipFilePath,$readOptions)
foreach($file in $zipfile){
    $file.FileName
} 
$zipfile.Dispose() 

ネット上によくあるサンプルコードでは、Readメソッドの第二引数に[System.Text.Encoding]を直接渡すものがありますが、これはv1.9では「”Read” のオーバーロードで、引数の数が “2” であるものが見つかりません。」というエラーになってしまいます。
NGなコード例(powershell)

[CmdletBinding()]
Param(
    [string]
    $zipFilePath = ".\test.zip"
)
[void][System.Reflection.Assembly]::LoadFrom(".\Ionic.Zip.dll" )

$encoding = [System.Text.Encoding]::GetEncoding(932)
$zipfile = [Ionic.Zip.ZipFile]::Read($zipFilePath,$encoding)   #←エラーになる
foreach($file in $zipfile){
    $file.FileName
} 
$zipfile.Dispose() 

結構ハマッた。

コメントを残す