酢ろぐ!

カレーが嫌いなスマートフォンアプリプログラマのブログ。

Windows MobileでSharpZipLibを使ってZip形式のアーカイブ内の一覧を表示する

SharpZipLibを使用してZip形式のアーカイブ内の一覧を表示します。ここでは、SharpZipLibのバージョンは0.85.5を使用しています。

名前の表示にMessageBox.Show()メソッドを使用しているので、沢山のファイルが格納されているアーカイブを開くと延々とOKボタンを押し続ける作業になる可能性がありますので気をつけてください。

上記のサイトからSharpZipLibをダウンロードできなくなっている場合は、本記事で紹介しているバージョンと異なりますが、v0.86.0のバイナリがここからダウンロードすることが可能です。

' ファイルの先頭で名前空間の宣言をしてください
' Imports System.IO

Private Sub Button2_Click(ByVal sender As System.Object, _
                          ByVal e As System.EventArgs)

    ' 一覧を表示するターゲットのZipファイルパス
    Dim filePath As String = "C:\Temp.zip"
    ' Windows Mobileで使う場合は、ドライブの概念が無いので注意する
    'Dim filePath As String = "\Storage Card\Temp.zip"

    ' 読み込みファイルストリームを作成
    Using strm As New FileStream(filePath, FileMode.Open, _
                                 FileAccess.Read, FileShare.Read), _
          zipStrm As New ICSharpCode.SharpZipLib.Zip.ZipInputStream(strm)

        ' Zipストリームから最初のエントリを取得する
        Dim entry As ICSharpCode.SharpZipLib.Zip.ZipEntry _
            = zipStrm.GetNextEntry()
        While (entry IsNot Nothing)

            ' 名前を表示する
            MessageBox.Show(entry.Name)

            ' 次のエントリを取得する
            entry = zipStrm.GetNextEntry()
        End While
    End Using

End Sub
// ファイルの先頭で名前空間の宣言をしてください
using System.IO;

private void Button2_Click(System.Object sender, System.EventArgs e)
{
    // 一覧を表示するターゲットのZipファイルパス
    string filePath = "C:\\Temp.zip";
    // Windows Mobileで使う場合は、ドライブの概念が無いので注意する
    //Dim filePath As String = "\Storage Card\Temp.zip"

    // 読み込みファイルストリームを作成
    using (FileStream strm = new FileStream(filePath, FileMode.Open,
                                            FileAccess.Read, FileShare.Read))
    {
        using (ICSharpCode.SharpZipLib.Zip.ZipInputStream zipStrm
                = new ICSharpCode.SharpZipLib.Zip.ZipInputStream(strm))
        {
            // Zipストリームから最初のエントリを取得する
            ICSharpCode.SharpZipLib.Zip.ZipEntry entry
                = zipStrm.GetNextEntry();
            while ((entry != null))
            {
                // 名前を表示する
                MessageBox.Show(entry.Name);

                // 次のエントリを取得する
                entry = zipStrm.GetNextEntry();
            }
        }
    }
}

## 関連記事