【问题标题】:how to unzip the file using c# [duplicate]如何使用c#解压缩文件[重复]
【发布时间】:2010-08-02 08:42:15
【问题描述】:

可能重复:
recommend a library/API to unzip file in C#

处理所有请建议使用 c# 将文件解压缩到选定文件夹的方法

【问题讨论】:

    标签: c#


    【解决方案1】:

    看看 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);
                    }
                }
            }
        }
    }
    

    【讨论】:

    • 这将不允许您解压缩和压缩 ZIP 文件。虽然它们都使用 DEFLATE,但 ZIP 和 GZIP 是不兼容的。
    【解决方案2】:

    你有两个选择,

    1) 您可以使用第三方 API,例如 DotNetZip (http://www.codeplex.com/DotNetZip)

    2) 或者您可以使用 System.IO.Compression.DeflateStream。它需要 .NET 2.0。

    【讨论】:

    • 不,DeflateStream 无法解压缩文件。
    • 我认为确实如此——来自 MSDN “这个类代表 Deflate 算法,一种用于无损文件压缩和解压的行业标准算法”——msdn.microsoft.com/en-us/library/…
    • DeflateStream 单独无法解压缩 .zip 文件。实际上,您链接的页面明确表示,“此类本身并不提供将文件添加到 .zip 档案或从 .zip 档案中提取文件的功能。”
    【解决方案3】:

    尝试使用 FastZip 转至zip and unzip the files

    【讨论】:

      【解决方案4】:

      在 .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);
      

      【讨论】:

      • 文件不是流。他们得到了您指定的流无法使用的标头。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-19
      • 2022-07-27
      • 2017-02-03
      • 1970-01-01
      相关资源
      最近更新 更多