.net压缩功能实现方法


在.NET中,实现文件或数据压缩功能,常用的库有`System.IO.Compression`,它提供了`ZipFile`和`DeflateStream`等类来支持压缩和解压操作。以下是使用`ZipFile`类来压缩文件夹或文件的一个简单示例:


using System;
using System.IO;
using System.IO.Compression;

public class CompressionHelper
{
    // 压缩文件夹
    public static void ZipFolder(string sourceFolder, string destinationArchive)
    {
        // 确保源文件夹存在
        if (!Directory.Exists(sourceFolder))
        {
            throw new InvalidOperationException("Source folder does not exist.");
        }

        // 创建或覆盖目标压缩文件
        ZipFile.CreateFromDirectory(sourceFolder, destinationArchive);

        Console.WriteLine($"Compression complete: {destinationArchive}");
    }

    // 压缩单个文件(如果需要的话)
    public static void ZipFileSingle(string sourceFile, string destinationArchive)
    {
        // 创建一个新的Zip存档
        using (var zipToOpen = new FileStream(destinationArchive, FileMode.Create))
        {
            using (var archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
            {
                var entry = archive.CreateEntry(Path.GetFileName(sourceFile));
                using (var entryStream = entry.Open())
                using (var fileToCompress = File.OpenRead(sourceFile))
                {
                    fileToCompress.CopyTo(entryStream);
                }
            }
        }

        Console.WriteLine($"Compression complete: {destinationArchive}");
    }
}

// 示例用法
class Program
{
    static void Main(string[] args)
    {
        string sourceFolder = @"C:\path\to\your\folder";
        string destinationArchive = @"C:\path\to\your\archive.zip";

        CompressionHelper.ZipFolder(sourceFolder, destinationArchive);

        // 或者压缩单个文件
        // string sourceFile = @"C:\path\to\your\file.txt";
        // CompressionHelper.ZipFileSingle(sourceFile, @"C:\path\to\your\file.zip");
    }
}

在这个示例中,`ZipFolder`方法用于压缩整个文件夹,而`ZipFileSingle`方法用于压缩单个文件。请根据你的需求选择使用。注意,在调用这些方法之前,请确保你拥有对源文件夹/文件的读取权限和对目标位置的写入权限。

这段代码演示了如何在.NET环境中使用`System.IO.Compression`命名空间下的类来创建ZIP文件。记得在使用之前,确保你的项目引用了这个命名空间。在.NET Core或.NET 5/6/7等较新版本的.NET中,这个命名空间是默认可用的。