简体   繁体   English

使用System.IO.Compression压缩完整文件夹

[英]Zip complete folder using System.IO.Compression

I have one example where all the files in the folder are zipped but not the folder itself .[This code is from MSDN] 我有一个例子,文件夹中的所有文件都是压缩的,但不是文件夹本身。[此代码来自MSDN]

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

I don't think you can zip a complete folder using System.IO.Compression, you can only compress files inside the folder. 我不认为你可以使用System.IO.Compression压缩整个文件夹,你只能压缩文件夹内的文件。 You can use DotNetZip instead. 您可以使用DotNetZip。 It is a 100% managed code library that can be used in any .NET application - Console, Winforms, WPF, ASP.NET, Sharepoint, Web services apps, and so on. 它是一个100%托管代码库,可用于任何.NET应用程序 - 控制台,Winforms,WPF,ASP.NET,Sharepoint,Web服务应用程序等。

Download developer's kit package from http://dotnetzip.codeplex.com/Release/ProjectReleases.aspx . http://dotnetzip.codeplex.com/Release/ProjectReleases.aspx下载开发人员的工具包。

Reference necessaries including DotNetZip DLL in your application and do follows: 在您的应用程序中参考必需品包括DotNetZip DLL,并执行以下操作:

string[] MainDirs = Directory.GetDirectories(""c:\users\public\reports");

for (int i = 0; i < MainDirs.Length; i++)
{
    using (ZipFile zip = new ZipFile())
    {
        zip.UseUnicodeAsNecessary = true;
        zip.AddDirectory(MainDirs[i]);
        zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
        zip.Comment = "This zip was created at " + System.DateTime.Now.ToString("G");
        zip.Save(string.Format("test{0}.zip", i));   
    }
}

Hope this helps, Thanks 希望这有帮助,谢谢

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 使用System.IO.Compression压缩Windows 10 Documents文件夹而不包含重新解析点 - Zip Windows 10 Documents folder without including reparse points using System.IO.Compression 使用 System.IO.Compression 在 memory 中创建一个 ZIP 存档 - Creating a ZIP archive in memory using System.IO.Compression 使用System.IO.Compression验证zip文件 - Validating zip files using System.IO.Compression C#使用zip存档System.IO.Compression创建zip文件 - C# create zip file using zip archive System.IO.Compression 如何使用System.IO.Compression仅压缩当前目录 - How to zip only the current directory with System.IO.Compression 使用System.IO.Compression创建无效的zip文件 - Invalid zip file after creating it with System.IO.Compression 使用System.IO.Compression C#提取嵌套在zip文件中的文件 - Extracting files nested within a zip file using System.IO.Compression C# 使用System.IO.Compression解压缩大的Gzip文件不起作用 - Decompressing Large Gzip File not working using System.IO.Compression Ionic.Zip、System.IO.Compression 和 SharpCompress 之间的 Zlib 压缩不兼容 - Zlib compression imcompatible between Ionic.Zip, System.IO.Compression and SharpCompress 使用 System.IO.Compression 创建的 Zip 文件不会在 Mac 上显示目录 - Zip files created with System.IO.Compression won't show directories on Mac
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM