【发布时间】:2010-08-02 08:42:15
【问题描述】:
【问题讨论】:
标签: c#
【问题讨论】:
标签: c#
看看 GZipStream,它是框架中内置的 zip 支持之一,在 MSDN 页面上有一个示例: http://msdn.microsoft.com/en-us/library/system.io.compression.gzipstream.aspx
这是来自 MSDN 页面的示例:
public class Program
{
public static void Main()
{
// Path to directory of files to compress and decompress.
string dirpath = @"c:\users\public\reports";
DirectoryInfo di = new DirectoryInfo(dirpath);
// Compress the directory's files.
foreach (FileInfo fi in di.GetFiles())
{
Compress(fi);
}
// Decompress all *.gz files in the directory.
foreach (FileInfo fi in di.GetFiles("*.gz"))
{
Decompress(fi);
}
}
public static void Compress(FileInfo fi)
{
// Get the stream of the source file.
using (FileStream inFile = fi.OpenRead())
{
// Prevent compressing hidden and
// already compressed files.
if ((File.GetAttributes(fi.FullName)
& FileAttributes.Hidden)
!= FileAttributes.Hidden & fi.Extension != ".gz")
{
// Create the compressed file.
using (FileStream outFile =
File.Create(fi.FullName + ".gz"))
{
using (GZipStream Compress =
new GZipStream(outFile,
CompressionMode.Compress))
{
// Copy the source file into
// the compression stream.
inFile.CopyTo(Compress);
Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
fi.Name, fi.Length.ToString(), outFile.Length.ToString());
}
}
}
}
}
public static void Decompress(FileInfo fi)
{
// Get the stream of the source file.
using (FileStream inFile = fi.OpenRead())
{
// Get original file extension, for example
// "doc" from report.doc.gz.
string curFile = fi.FullName;
string origName = curFile.Remove(curFile.Length -
fi.Extension.Length);
//Create the decompressed file.
using (FileStream outFile = File.Create(origName))
{
using (GZipStream Decompress = new GZipStream(inFile,
CompressionMode.Decompress))
{
// Copy the decompression stream
// into the output file.
Decompress.CopyTo(outFile);
Console.WriteLine("Decompressed: {0}", fi.Name);
}
}
}
}
}
【讨论】:
你有两个选择,
1) 您可以使用第三方 API,例如 DotNetZip (http://www.codeplex.com/DotNetZip)
2) 或者您可以使用 System.IO.Compression.DeflateStream。它需要 .NET 2.0。
【讨论】:
DeflateStream 无法解压缩文件。
尝试使用 FastZip 转至zip and unzip the files
【讨论】:
在 .NET 中有两种内置的方式来处理压缩流。 DeflateStream 和 GZipStream
DeflateStream ds = new DeflateStream(File.OpenRead(@"c:\myfolder\data.zip"), CompressionMode.Decompress);
GZipStream gZip = new GZipStream(File.OpenRead(@"c:\myfolder\data.zip"), CompressionMode.Decompress);
【讨论】: