どうも!リョクちゃです。
今回は、VB.Netでzipファイルを操作する方法の一部を
例を交えて紹介していきます。
前回の記事はこちら、
目次
zipとは
zipとは、ファイル形式の一つで、ファイルの拡張子に.zipと書かれたファイルが該当します。
意味としては、圧縮ファイルのひとつになります。
イメージで表すと、下図のような感じです。
図に書いてあるように、複数のファイルを1つのファイルに圧縮して、
作成されるファイルがzipファイルになります。
作成されたzipファイルには、複数のファイルが含まれています。
用途としては、メールでの複数のファイルを送信したいときに圧縮して渡したり、
データサイズを軽減させたい場合に使われます。
メールに添付されたzipファイルは、
解凍することでファイルの中身を取り出すことができます。
準備編:フォームの作成
準備編:テスト用zipファイルの作成
下図のような流れでテキストファイルを作成し、
圧縮を行いzipファイルを作成しています。
作成したzipファイルは、任意の場所に保存しておき、パス(場所)を覚えておきましょう。
ちなみに筆者の環境は、
- VisualStudio2019
- Windows 10 64bit
- .Net Framework 4.6.1
です。
アプリケーションの目的
今回はボタンを押して、テスト用に作成したzipファイルを解凍せずに
Zipファイルを解凍せずにファイルの中身を取得し、
フォーム上のテキストボックスに表示していきます。
プログラム編
Zipファイルを操作するためにライブラリをインストール
Zipファイルを操作していく前に、ライブラリをインストールしていく必要があります。
今回使用するライブラリは、
になります。
まず、インストールするには、NuGetパッケージマネージャを開く必要があります。
下図を参考に開いてみましょう。
開くと、下図が表示されます。
※表示されている画面では、既にライブラリがインストールされています。
画面上の参照(インストール済みの左隣)をクリックし、
検索ボックスに”System.IO.Compression”と入力し検索をかけます。
選択したら、右にライブラリの詳細が表示されます。
そこに”インストール”ボタンがあるので、クリックしてインストールをします。
これでライブラリのインストールは完了です。
Zipファイルを開く
Zipファイルを開くには、
と
の二つの関数・メソッドを使用します。
コードで書くと下のようになります。
1 2 3 4 5 6 7 8 9 |
Imports System.IO.Compression Public Class TestZip Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Zipファイルを開く Dim zipFilePath As System.IO.Compression.ZipArchive = ZipFile.OpenRead("./Test.zip") End Sub End Class |
あらかじめ、System.IO.CompressionをImportsを記述することでインポートしています。
インポートすることで、System.IO.Compressionを省略した形で記述することが可能です。
Zipファイルに含まれる読み込むファイルを指定
と
先に指定した開くZipファイル変数を使って、
これらを使ってファイルの指定を行います。
コードで書くと下のようになります。
1 2 3 4 5 6 7 8 9 10 11 |
Imports System.IO.Compression Public Class TestZip Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Zipファイルを開く Dim zipFilePath As System.IO.Compression.ZipArchive = ZipFile.OpenRead("./Test.zip") ' Zipファイルに含まれるファイルを指定 Dim zipInFile As System.IO.Compression.ZipArchiveEntry = zipFilePath.GetEntry("Test.txt") End Sub End Class |
zipファイルの中身を読み取って、表示
次に、zipファイル内に該当のファイルがあるかチェックをするコードと
zipファイルを読み込むコードを書いていきます。
ファイルを読み込んだらテキストボックスに表示していくコードも書いてしまいます。
ファイルを読み込むには、
を使用します。
これについては、テキストファイルの記事でも紹介していますので、
そちらを参考にしていただけたらなと思います。
コードで書くと下のようになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
Imports System.IO.Compression Public Class TestZip Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click ' Zipファイルを開く Dim zipFilePath As System.IO.Compression.ZipArchive = ZipFile.OpenRead("./Test.zip") ' Zipファイルに含まれるファイルを指定 Dim zipInFile As System.IO.Compression.ZipArchiveEntry = zipFilePath.GetEntry("Test.txt") ' zipファイル内に該当のファイルがあるかチェック If zipInFile Is Nothing Then MessageBox.Show("Test.txtファイルは見つかりませんでした。") Else ' zipファイルの中身を読み取る 変数を作成+インスタンス化 Dim sr As New System.IO.StreamReader(zipInFile.Open(), System.Text.Encoding.GetEncoding("utf-8")) ' 全て読み込む While sr.Peek >= 0 Me.TextBox1.Text += sr.ReadLine + vbCrLf End While ' ファイルの解放 If sr IsNot Nothing Then sr.Close() sr.Dispose() sr = Nothing GC.Collect() End If End If End Sub End Class |
最後に、読み込んだ変数のオブジェクトを解放してやることでプログラムの完成です。
まとめ
今回はzipファイルの操作、中でもファイルを解凍せずに中身を、
読み取る方法を例を交えて紹介解説しました。
zipファイルの操作に悩んでる方にぜひ、覚えていただけたらなと思います。
ご覧いただきありがとうございました。
・こちらの書籍を参考にVB.Net勉強しています。