VB.NETで圧縮ファイルを扱う方法を完全ガイド!初心者でもわかるZipFileの使い方
生徒
「たくさんのファイルを一つにまとめたり、サイズを小さくしたりする『ジップ』って、プログラムでも作れますか?」
先生
「はい、もちろんです。VB.NETではSystem.IO.Compressionという道具を使えば、簡単にZipファイルを作ったり解凍したりできますよ。」
生徒
「難しそうに聞こえますが、初心者でも大丈夫でしょうか?」
先生
「大丈夫です!たった一文字の命令でフォルダーごと圧縮することもできるんです。基本的な使い方をマスターしましょう!」
1. 圧縮ファイル(Zip)とは?データを布団圧縮袋に入れるイメージ
パソコンを使い始めたばかりの方にとって、「圧縮(あっしゅく)」という言葉は少し難しく感じるかもしれません。一番わかりやすい例えは、季節外れの布団を「布団圧縮袋」に入れる様子です。かさばる布団を袋に入れて空気を抜くと、薄くなって持ち運びやすくなりますよね。パソコンの世界でのZip(ジップ)ファイルもこれと同じです。
たくさんの書類(ファイル)を一つの袋(Zip形式)にまとめ、さらにデータの隙間を詰めて全体のサイズを小さくします。これにより、メールで送るのが楽になったり、パソコンの保存容量を節約できたりします。VB.NETでは、この圧縮作業をプログラムで自動的に行うことができます。例えば、毎日決まった時間に特定のフォルダーをバックアップして圧縮する、といった便利な仕組みが作れるようになります。
2. フォルダーごと一気に圧縮するCreateFromDirectory
まずは、あるフォルダーの中身を丸ごと一つのZipファイルにまとめる方法を学びましょう。VB.NETでは ZipFile.CreateFromDirectory という非常に便利な命令を使います。これを使うには、プログラムの冒頭に Imports System.IO.Compression というおまじないが必要です。これは「圧縮に関する機能を使います」という宣言です。
以下のプログラムは、「作業用フォルダー」を「バックアップ.zip」という名前に圧縮する例です。住所(パス)を二つ教えるだけで、あとはパソコンが全部やってくれます。
Imports System.IO.Compression
Module Module1
Sub Main()
' 圧縮したいフォルダーの場所
Dim startPath As String = "C:\Work\Documents"
' 出来上がるZipファイルの保存先と名前
Dim zipPath As String = "C:\Work\Backup.zip"
' 指定したフォルダーをZipファイルに圧縮します
ZipFile.CreateFromDirectory(startPath, zipPath)
Console.WriteLine("フォルダーの圧縮が完了しました!")
End Sub
End Module
3. 専門用語のやさしい解説:ディレクトリ、解凍、拡張子
ここで、今回の学習でよく出てくる用語を整理しておきましょう。意味を知っておくと、プログラミングの理解がぐっと深まります。
- ディレクトリ (Directory):パソコン用語で「フォルダー」のことです。書類をまとめて入れる箱のことですね。
- 解凍(展開):圧縮されて小さくなったファイルを、元のバラバラの状態に戻すことです。「展開」と呼ぶこともあります。
- 拡張子 (Extension):ファイル名の最後についている「.zip」や「.txt」などの部分です。これによってパソコンはそのファイルが何の種類かを判断します。
- 名前空間 (Namespace):今回の
System.IO.Compressionのような、命令のグループ名のことです。
プログラミングでは、これらを組み合わせて「どの住所のフォルダーを、どの名前のZipにするか」を指示していきます。基本的な考え方は、普段マウスで操作していることと同じです。
4. Zipファイルを元の状態に戻すExtractToDirectory
次は、圧縮されたZipファイルを元のフォルダー形式に戻す「解凍」の操作です。これを英語ではExtract(エクストラクト)と呼びます。VB.NETでは ZipFile.ExtractToDirectory という命令を使います。これは、圧縮袋から布団を取り出して、元の部屋に広げるような作業です。
この命令も非常にシンプルです。「どのZipファイルを」「どこのフォルダーに」解凍するかを指定するだけです。指定した場所にフォルダーがない場合は、自動的に作成して中身を広げてくれます。
Imports System.IO.Compression
Module Module2
Sub Main()
' 解凍したいZipファイルの場所
Dim zipPath As String = "C:\Work\Archive.zip"
' 中身を取り出す場所
Dim extractPath As String = "C:\Work\ExtractedData"
' Zipファイルを指定した場所に解凍します
ZipFile.ExtractToDirectory(zipPath, extractPath)
Console.WriteLine("解凍(展開)が完了しました!")
End Sub
End Module
5. Zipファイルの中身に新しいファイルを追加する
一度作ったZipファイルに対して、後から「この書類も入れておいて!」と追加したいことがあります。その場合は、ZipFile.Open という命令で一旦Zipファイルを開き、そこに新しいファイルを追加する処理を行います。これは、すでに閉じた圧縮袋のジッパーを少しだけ開けて、隙間から新しい書類を差し込むようなイメージです。
この方法では、Using(ユージング)という仕組みを使うのがコツです。これを使うと、追加が終わった瞬間に自動的にジッパーを閉めてくれるので、ファイルが壊れる心配がありません。
Imports System.IO.Compression
Module Module3
Sub Main()
Dim zipPath As String = "C:\Work\MyArchive.zip"
Dim newFile As String = "C:\Work\Extra.txt"
' Zipファイルを「更新モード」で開きます
Using archive As ZipArchive = ZipFile.Open(zipPath, ZipArchiveMode.Update)
' Zipの中に新しいファイルを作成し、中身をコピーします
archive.CreateEntryFromFile(newFile, "Extra.txt")
End Using
Console.WriteLine("Zipファイルに新しいデータを追加しました。")
End Sub
End Module
6. 圧縮率を指定してサイズを調整する考え方
圧縮には「どれくらい頑張って小さくするか」というレベル設定があります。これを圧縮レベルと呼びます。VB.NETでは、とにかく早く終わらせる設定(最速)や、時間はかかっても最大限小さくする設定(最適)などを選ぶことができます。
特に大きな動画や大量の写真を扱う場合は、この設定一つで処理時間が変わってきます。基本的には標準の設定で十分ですが、「とにかく急いでまとめたい!」という時には最速設定を使うなど、目的に合わせた使い分けが可能です。初心者の方はまず、標準のままで動かしてみて、慣れてきたらこのレベル調整にも挑戦してみましょう。
Imports System.IO.Compression
Module Module4
Sub Main()
Dim fromPath As String = "C:\LargeData"
Dim toZip As String = "C:\Output\Fast.zip"
' 圧縮レベルを「最速(Fastest)」に指定して作成します
' 第3引数にレベルを、第4引数にフォルダー自体を含めるかを指定します
ZipFile.CreateFromDirectory(fromPath, toZip, CompressionLevel.Fastest, False)
Console.WriteLine("スピード優先で圧縮を完了しました。")
End Sub
End Module
7. 安全に圧縮・解凍を行うための注意点
最後に、エラーを防ぐための大切なポイントをいくつかお伝えします。プログラムは指示通りに動こうとしますが、無理な状況ではエラーを出して止まってしまいます。
まず、「同じ名前のZipファイルが既に存在している」場所に新しく作ろうとすると、VB.NETは上書きしていいのか判断できずにエラーになります。作成前に、前回のレッスンで学んだ File.Exists を使って、すでにファイルがないか確認するようにしましょう。また、解凍するときも「解凍先のフォルダーがすでに使われていないか」をチェックすると安心です。
さらに、圧縮作業はパソコンのパワーをたくさん使います。非常に大きなファイルを扱うときは、少し時間がかかることを覚えておいてください。こうした基本的なマナーを守ることで、誰が使っても壊れない、優しくて便利なプログラムを作ることができます。フォルダー操作と圧縮を組み合わせれば、あなただけの自動お片付けツールが完成しますよ!