.NET独自の圧縮と解凍
5537 ワード
System.IO.compressionネーミングスペースには、次のような基本的なファイルとストリーム圧縮と解凍サービスのタイプが含まれています.また、これらのタイプを使用して圧縮ファイルの内容を読み取り、変更することもできます.主に、ZipFile ZipArchive ZipArchiveEntry DeflateStream GZipStream
1.ZipFileクラスを使用して、.zipファイル拡張子を持つ圧縮ファイルを作成および抽出します.System.IO.compression.FileSystemプログラムセットを参照する必要があります.
2.既存の.zipファイルの内容を繰り返しアーカイブし、.txt拡張子のあるファイルを抽出します.ZipArchiveクラスを使用して既存の.zipファイルとZipArchiveEntryクラスにアクセスし、圧縮ファイルの各項目を確認する必要があります.
プロジェクトのSystem.IO.compression.FileSystemプログラムセットを参照します.
http://blog.csdn.net/allsharps/article/details/7357328
1.ZipFileクラスを使用して、.zipファイル拡張子を持つ圧縮ファイルを作成および抽出します.System.IO.compression.FileSystemプログラムセットを参照する必要があります.
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
string startPath = @"c:\example\start";
string zipPath = @"c:\example\result.zip";
string extractPath = @"c:\example\extract";
ZipFile.CreateFromDirectory(startPath, zipPath);
ZipFile.ExtractToDirectory(zipPath, extractPath);
}
}
}
2.既存の.zipファイルの内容を繰り返しアーカイブし、.txt拡張子のあるファイルを抽出します.ZipArchiveクラスを使用して既存の.zipファイルとZipArchiveEntryクラスにアクセスし、圧縮ファイルの各項目を確認する必要があります.
プロジェクトのSystem.IO.compression.FileSystemプログラムセットを参照します.
using System;
using System.IO;
using System.IO.Compression;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string zipPath = @"c:\example\start.zip";
string extractPath = @"c:\example\extract";
using (ZipArchive archive = ZipFile.OpenRead(zipPath))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
if (entry.FullName.EndsWith(".txt", StringComparison.OrdinalIgnoreCase))
{
entry.ExtractToFile(Path.Combine(extractPath, entry.FullName));
}
}
}
}
}
}
3.ZipArchiveクラスを使用して既存の.zipファイルにアクセスし、圧縮ファイルに新しいファイルを追加します.既存の.zipファイルに追加すると、新しいファイルが圧縮されます.namespace ConsoleApplication
{
class Program
{
static void Main(string[] args)
{
using (FileStream zipToOpen = new FileStream(@"c:\users\exampleuser\release.zip", FileMode.Open))
{
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Update))
{
ZipArchiveEntry readmeEntry = archive.CreateEntry("Readme.txt");
using (StreamWriter writer = new StreamWriter(readmeEntry.Open()))
{
writer.WriteLine("Information about this package.");
writer.WriteLine("========================");
}
}
}
}
}
}
4.GZipStreamおよびDeflateStreamクラスを使用してデータを圧縮および解凍します.同じ圧縮アルゴリズムを使用します.ファイル拡張子.gzを書き込む圧縮GZipStreamオブジェクトは、GZipStreamが提供する方法に加えて、多くの一般的なツールを使用することで解凍できます. public class Program
{
private static string directoryPath = @"c:\temp";
public static void Main()
{
DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
Compress(directorySelected);
foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
{
Decompress(fileToDecompress);
}
}
public static void Compress(DirectoryInfo directorySelected)
{
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
{
using (FileStream originalFileStream = fileToCompress.OpenRead())
{
if ((File.GetAttributes(fileToCompress.FullName) &
FileAttributes.Hidden) != FileAttributes.Hidden & fileToCompress.Extension != ".gz")
{
using (FileStream compressedFileStream = File.Create(fileToCompress.FullName + ".gz"))
{
using (GZipStream compressionStream = new GZipStream(compressedFileStream,
CompressionMode.Compress))
{
originalFileStream.CopyTo(compressionStream);
}
}
FileInfo info = new FileInfo(directoryPath + "\\" + fileToCompress.Name + ".gz");
Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
fileToCompress.Name, fileToCompress.Length.ToString(), info.Length.ToString());
}
}
}
}
public static void Decompress(FileInfo fileToDecompress)
{
using (FileStream originalFileStream = fileToDecompress.OpenRead())
{
string currentFileName = fileToDecompress.FullName;
string newFileName = currentFileName.Remove(currentFileName.Length - fileToDecompress.Extension.Length);
using (FileStream decompressedFileStream = File.Create(newFileName))
{
using (GZipStream decompressionStream = new GZipStream(originalFileStream, CompressionMode.Decompress))
{
decompressionStream.CopyTo(decompressedFileStream);
Console.WriteLine("Decompressed: {0}", fileToDecompress.Name);
}
}
}
}
http://blog.csdn.net/allsharps/article/details/7357328