使用Gzip压缩文件夹 [英] Compress folder with Gzip
本文介绍了使用Gzip压缩文件夹的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
此示例不起作用,压缩文件变空:
this example doesn''t work, compressed file gets empty:
string inFileName = "uncompressed.txt";
string outFileName = "compressed.gz";
// Create file streams
FileStream sourceFile = File.OpenRead(inFileName);
FileStream destFile = File.Create(outFileName);
GZipStream compressionStream = new GZipStream(destFile, CompressionMode.Compress);
// Read data from the source stream and pass it to the compression stream
int readByte = sourceFile.ReadByte();
while (readByte != -1)
{
compressionStream.WriteByte((byte)readByte);
readByte = sourceFile.ReadByte();
}
在MSDN上找到的这个也行不通 - 这行错误:
This one found on MSDN also does''t work - error in this line:
originalFileStream.CopyTo
命令CopyTo不存在!
Command CopyTo doesn''t exists!
using System;
using System.IO;
using System.IO.Compression;
namespace zip
{
public class Program
{
public static void Main()
{
string directoryPath = @"c:\users\public\reports";
DirectoryInfo directorySelected = new DirectoryInfo(directoryPath);
foreach (FileInfo fileToCompress in directorySelected.GetFiles())
{
Compress(fileToCompress);
}
foreach (FileInfo fileToDecompress in directorySelected.GetFiles("*.gz"))
{
Decompress(fileToDecompress);
}
}
public static void Compress(FileInfo fileToCompress)
{
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);
Console.WriteLine("Compressed {0} from {1} to {2} bytes.",
fileToCompress.Name, fileToCompress.Length.ToString(), compressedFileStream.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);
}
}
}
}
}
}
编辑:是否有可能将文件夹发送到像explorer一样的压缩(zipped)文件夹,但是以编程方式使用C#?
Is it possible to send folder to compressed(zipped) folder like explorer do, but programatically using C#?
推荐答案
看看这里:
http://www.dotnetperls.com/gzipstream [ ^ ]
这篇关于使用Gzip压缩文件夹的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文