如何压缩文件

sel*_*tas 15 .net c# compression io c#-2.0

我想在C#中压缩文件和目录.我在Internet上找到了一些解决方案,但它们非常复杂,我无法在我的项目中运行它们.有人能建议我一个明确有效的解决方案吗?

Dar*_*ren 24

您可以GZipStreamSystem.IO.Compression命名空间中使用

.NET 2.0.

public static void CompressFile(string path)
{
    FileStream sourceFile = File.OpenRead(path);
    FileStream destinationFile = File.Create(path + ".gz");

    byte[] buffer = new byte[sourceFile.Length];
    sourceFile.Read(buffer, 0, buffer.Length);

    using (GZipStream output = new GZipStream(destinationFile,
        CompressionMode.Compress))
    {
        Console.WriteLine("Compressing {0} to {1}.", sourceFile.Name,
            destinationFile.Name, false);

        output.Write(buffer, 0, buffer.Length);
    }

    // Close the files.
    sourceFile.Close();
    destinationFile.Close();
}
Run Code Online (Sandbox Code Playgroud)

.NET 4

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());
                    }
                }
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

http://msdn.microsoft.com/en-us/library/ms404280.aspx


Nic*_*ckG 16

我正在添加这个答案,因为我找到了比现有答案更简单的方法:

  1. 在您的解决方案中安装DotNetZip DLL(最简单的方法是从nuget 安装软件包)
  2. 添加对DLL的引用.
  3. 通过添加:使用Ionic.Zip导入命名空间;
  4. 压缩文件

码:

using (ZipFile zip = new ZipFile())
{
    zip.AddFile("C:\test\test.txt");
    zip.AddFile("C:\test\test2.txt");
    zip.Save("C:\output.zip");
}
Run Code Online (Sandbox Code Playgroud)

如果您不希望在zip文件中镜像原始文件夹结构,请查看AddFile()和AddFolder()等的覆盖.