当前位置:首页 > 科技  > 软件

搞懂C#文件压缩:SharpZipLib vs. DotNetZip,实用代码一网打尽!

来源: 责编: 时间:2024-03-20 17:27:43 152观看
导读1. SharpZipLib功能:支持ZIP和GZip格式的压缩和解压缩。提供了对Tar和BZip2格式的支持。轻量级,易于使用。优点:开源,广泛使用。灵活性较高,适用于多种压缩需求。使用实例:using System;using ICSharpCode.SharpZipLib.Zip;

81K28资讯网——每日最新资讯28at.com

1. SharpZipLib

功能:

  • 支持ZIP和GZip格式的压缩和解压缩。
  • 提供了对Tar和BZip2格式的支持。
  • 轻量级,易于使用。

优点:

  • 开源,广泛使用。
  • 灵活性较高,适用于多种压缩需求。

使用实例:

using System;using ICSharpCode.SharpZipLib.Zip;class Program{    static void Main()    {        string sourceFolder = @"C:/Path/To/Your/Folder";        string zipFile = @"C:/Path/To/Your/Archive.zip";        ZipDirectory(sourceFolder, zipFile);        Console.WriteLine("Compression completed.");        string extractFolder = @"C:/Path/To/Your/Extracted";        UnzipFile(zipFile, extractFolder);        Console.WriteLine("Extraction completed.");    }    static void ZipDirectory(string sourceFolder, string zipFile)    {        using (ZipOutputStream zipStream = new ZipOutputStream(System.IO.File.Create(zipFile)))        {            zipStream.SetLevel(9); // 0 - store only to 9 - means best compression            ZipFolder(sourceFolder, sourceFolder, zipStream);            zipStream.Finish();            zipStream.Close();        }    }    static void ZipFolder(string rootFolder, string currentFolder, ZipOutputStream zipStream)    {        string[] files = System.IO.Directory.GetFiles(currentFolder);        foreach (string file in files)        {            ZipFile(zipStream, currentFolder, file);        }        string[] subFolders = System.IO.Directory.GetDirectories(currentFolder);        foreach (string folder in subFolders)        {            ZipFolder(rootFolder, folder, zipStream);        }    }    static void ZipFile(ZipOutputStream zipStream, string rootFolder, string filePath)    {        byte[] buffer = new byte[4096];        string relativePath = filePath.Substring(rootFolder.Length + 1);        ZipEntry entry = new ZipEntry(relativePath);        zipStream.PutNextEntry(entry);        using (System.IO.FileStream fs = System.IO.File.OpenRead(filePath))        {            int sourceBytes;            do            {                sourceBytes = fs.Read(buffer, 0, buffer.Length);                zipStream.Write(buffer, 0, sourceBytes);            } while (sourceBytes > 0);        }    }    static void UnzipFile(string zipFile, string extractFolder)    {        using (ZipInputStream zipStream = new ZipInputStream(System.IO.File.OpenRead(zipFile)))        {            ZipEntry entry;            while ((entry = zipStream.GetNextEntry()) != null)            {                string entryName = entry.Name;                string fullZipToPath = System.IO.Path.Combine(extractFolder, entryName);                string directoryName = System.IO.Path.GetDirectoryName(fullZipToPath);                if (directoryName.Length > 0)                {                    System.IO.Directory.CreateDirectory(directoryName);                }                if (entry.IsFile)                {                    byte[] buffer = new byte[4096];                    using (System.IO.FileStream streamWriter = System.IO.File.Create(fullZipToPath))                    {                        int sourceBytes;                        do                        {                            sourceBytes = zipStream.Read(buffer, 0, buffer.Length);                            streamWriter.Write(buffer, 0, sourceBytes);                        } while (sourceBytes > 0);                    }                }            }        }    }}

2. DotNetZip

功能:

  • 支持ZIP格式的压缩和解压缩。
  • 提供了对多卷和自解压缩ZIP文件的支持。
  • 具有更简单的API,易于使用。

优点:

  • 使用方便,简洁明了。
  • 集成度高,适合快速实现文件压缩解压缩功能。

使用实例:

using System;using Ionic.Zip;class Program{    static void Main()    {        string sourceFolder = @"C:/Path/To/Your/Folder";        string zipFile = @"C:/Path/To/Your/Archive.zip";        ZipDirectory(sourceFolder, zipFile);        Console.WriteLine("Compression completed.");        string extractFolder = @"C:/Path/To/Your/Extracted";        UnzipFile(zipFile, extractFolder);        Console.WriteLine("Extraction completed.");    }    static void ZipDirectory(string sourceFolder, string zipFile)    {        using (ZipFile zip = new ZipFile())        {            zip.AddDirectory(sourceFolder);            zip.Save(zipFile);        }    }    static void UnzipFile(string zipFile, string extractFolder)    {        using (ZipFile zip = ZipFile.Read(zipFile))        {            zip.ExtractAll(extractFolder, ExtractExistingFileAction.OverwriteSilently);        }    }}

以上两个例子都提供了基本的目录压缩和解压缩功能,你可以根据具体需求进行进一步定制。确保在实际项目中进行充分的测试和适当的错误处理。81K28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-78147-0.html搞懂C#文件压缩:SharpZipLib vs. DotNetZip,实用代码一网打尽!

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: Go 团队近两年在做什么,AI 方面如何发力?

下一篇: 行业机构 SEMI:全球 12 英寸晶圆厂设备投资 2025 年将破千亿美元大关

标签:
  • 热门焦点
Top