ねらわれたぴらにあ

MENU

【DotNetZip】ZIP化に失敗したファイルを知る方法【VB】

f:id:gakigaki077:20190331220831p:plain
DotNetZipのSaveメソッドで保存に失敗したとき、対象ファイルがどれなのかを出力したい」
といったケースには次のような解決策があります。



ZIP化に失敗したファイルを知る方法|DotNetZip

サンプルコードがこちら。

    Sub Main(args As String())
       Using zip As New Ionic.Zip.ZipFile()

            'イベントハンドラを登録
            zip.ZipErrorAction = Ionic.Zip.ZipErrorAction.InvokeErrorEvent
            AddHandler zip.ZipError, AddressOf zipError

            'エンコード 
            zip.ProvisionalAlternateEncoding = System.Text.Encoding.GetEncoding("shift_jis")

            'ファイルをzipに追加する
            zip.AddFile("対象ファイルパス\ファイル名.拡張子")

            'zipを保存
            zip.Save("出力先パス\ファイル名.zip")

         End Using
    End Sub

    'イベントハンドラ
    Private Sub zipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs)

        '問題が生じたファイル名を出力
        Console.WriteLine(e.FileName)

    End Sub


まず、Saveメソッドで失敗したときのエラーを捉えるイベントハンドラを追加します。
第2引数の「e」にはエラーの情報が内包されており、「e.FileName」でエラーとなった
ファイル名を取得することができます。

    'イベントハンドラ
    Private Sub zipError(ByVal sender As Object, ByVal e As Ionic.Zip.ZipErrorEventArgs)

        '問題が生じたファイル名を出力
        Console.WriteLine(e.FileName)

    End Sub


あとは、Saveメソッドを呼び出す手前で上記のイベントハンドラの登録を行えば完了です。

            'イベントハンドラを登録
            zip.ZipErrorAction = Ionic.Zip.ZipErrorAction.InvokeErrorEvent
            AddHandler zip.ZipError, AddressOf zipError

なお、このままのソースだとファイル名は取得できますが、
Exceptionで落ちてしまいますので、例外処理を入れるようにしてください。