名前空間 System.IO.Compression
自己紹介
こんにちは。私は癒しと再生を司る存在。今日は、ファイル操作の世界を癒し、整える「ZipArchiveクラス」についてお話しましょう。このクラスは、圧縮や解凍といった処理を簡単に扱える非常に便利な道具です。私と一緒にその使い方を見ていきましょうね。
基本機能
ZipArchiveクラスは、圧縮されたZIPファイルを操作するためのクラスです。これを使うと、ファイルの追加、削除、解凍などが簡単に行えます。以下の例では、ZIPファイル内のファイルリストを取得して表示する方法を示します。
using System;
using System.IO;
using System.IO.Compression;
class Program
{
static void Main()
{
string zipPath = "example.zip";
using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
Console.WriteLine($"ファイル名: {entry.FullName}, サイズ: {entry.Length}バイト");
}
}
}
}
このコードでは、ZIPファイル内のエントリを列挙し、それぞれの名前とサイズを表示します。
よく使う場面と注意点
ZipArchiveクラスは、バックアップやデータの圧縮を効率的に行いたい場合に便利です。ただし、パスワード付きのZIPファイルには対応していないため、その点に注意が必要です。以下は、ZIPファイルを解凍する例です。
using System;
using System.IO;
using System.IO.Compression;
class Program
{
static void Main()
{
string zipPath = "example.zip";
string extractPath = "extracted";
try
{
ZipFile.ExtractToDirectory(zipPath, extractPath);
Console.WriteLine("解凍が完了しました。");
}
catch (Exception ex)
{
Console.WriteLine($"エラー: {ex.Message}");
}
}
}
このコードは、指定したZIPファイルを解凍します。
圧縮と解凍を効率化するメソッド
ZipArchiveクラスには、圧縮率を調整するオプションがあります。主に以下の3種類があります:
- CompressionLevel.Optimal: バランスの取れた圧縮率と速度を提供します。
- CompressionLevel.Fastest: 圧縮速度を優先しますが、ファイルサイズはやや大きくなります。
- CompressionLevel.NoCompression: 圧縮を行わずにファイルをそのまま保存します。
以下の例では、高圧縮率で新しいZIPファイルを作成する方法を示します。
using System;
using System.IO;
using System.IO.Compression;
class Program
{
static void Main()
{
string zipPath = "compressed.zip";
string filePath = "file.txt";
using (FileStream zipToOpen = new FileStream(zipPath, FileMode.Create))
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
{
ZipArchiveEntry entry = archive.CreateEntryFromFile(filePath, Path.GetFileName(filePath), CompressionLevel.Optimal);
Console.WriteLine($"{entry.FullName} を圧縮しました。");
}
}
}
このコードでは、指定したファイルを高圧縮率でZIPファイルに追加します。
具体的な使い方
次に、フォルダ全体をZIPファイルに圧縮する例を見てみましょう。
using System;
using System.IO;
using System.IO.Compression;
class Program
{
static void Main()
{
string folderPath = "exampleFolder";
string zipPath = "folder.zip";
try
{
ZipFile.CreateFromDirectory(folderPath, zipPath, CompressionLevel.Fastest, false);
Console.WriteLine("フォルダを圧縮しました。");
}
catch (Exception ex)
{
Console.WriteLine($"エラー: {ex.Message}");
}
}
}
このコードは、指定したフォルダをZIPファイルとして圧縮します。
その他の便利なメソッド
ZipArchiveクラスには、以下のような便利なメソッドがあります。
- CreateEntry: ZIPファイルに新しいエントリを作成
- DeleteEntry: ZIPファイルからエントリを削除
- Open: ZIPファイルを開く
以下に、新しいエントリを作成する例を示します。
using System;
using System.IO;
using System.IO.Compression;
class Program
{
static void Main()
{
string zipPath = "example.zip";
using (FileStream zipToOpen = new FileStream(zipPath, FileMode.OpenOrCreate))
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry entry = archive.CreateEntry("newFile.txt");
using (StreamWriter writer = new StreamWriter(entry.Open()))
{
writer.WriteLine("新しいファイルをZIPに追加しました。");
}
Console.WriteLine($"{entry.FullName} を作成しました。");
}
}
}
このコードは、新しいエントリをZIPファイルに追加します。
0 件のコメント:
コメントを投稿