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

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

1[CmdletBinding()]
2Param(
3    [string]
4    $zipFilePath = ".\test.zip"
5)
6[void][System.Reflection.Assembly]::LoadFrom(".\Ionic.Zip.dll" )
7 
8$readOptions = New-Object Ionic.Zip.ReadOptions
9$readOptions.Encoding = [System.Text.Encoding]::GetEncoding(932)
10$zipfile = [Ionic.Zip.ZipFile]::Read($zipFilePath,$readOptions)
11foreach($file in $zipfile){
12    $file.FileName
13}
14$zipfile.Dispose()

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

1[CmdletBinding()]
2Param(
3    [string]
4    $zipFilePath = ".\test.zip"
5)
6[void][System.Reflection.Assembly]::LoadFrom(".\Ionic.Zip.dll" )
7 
8$encoding = [System.Text.Encoding]::GetEncoding(932)
9$zipfile = [Ionic.Zip.ZipFile]::Read($zipFilePath,$encoding)   #←エラーになる
10foreach($file in $zipfile){
11    $file.FileName
12}
13$zipfile.Dispose()

結構ハマッた。

コメントを残す