使用Gzip压缩文件夹 [英] Compress folder with Gzip

查看:944
本文介绍了使用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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆