C# 使用Microsoft内置类库实现zip加解压

本文介绍了如何在C#中利用System.IO.Compression命名空间中的方法进行文件的压缩和解压,包括ZipHelper类的使用示例,并提到了对于更复杂需求时推荐使用第三方组件如SharpZipLib和DotNetZip。

写在前面

无需其他第三方组件,使用微软自带的类型就可以实现对文件的压缩和解压。

using System.IO.Compression;

代码实现

   public static class ZipHelper
    {
        /// <summary>
        /// 将指定文件目录压缩为Zip文件
        /// </summary>
        /// <param name="targetFolderPath">目标文件夹路径 </param>
        /// <param name="zipPath">zip路径</param>
        public static void CompressDirectoryZip(string targetFolderPath, string zipPath)
        {
            var dir = Directory.GetParent(zipPath).FullName;
            if (!Directory.Exists(dir))
            {
                Directory.CreateDirectory(dir);
            }
            ZipFile.CreateFromDirectory(targetFolderPath, zipPath, CompressionLevel.Optimal, false);            
        }

        /// <summary>
        /// 将指定文件压缩为Zip文件
        /// </summary>
        /// <param name="targetFilePath">目标文件路径</param>
        /// <param name="zipFilePath">zip路径</param>
        public static void CompressFileZip(string targetFilePath, string zipFilePath)
        {
            string tempDir = Path.Combine(Directory.GetParent(targetFilePath).FullName, Guid.NewGuid().ToString());
            if (!Directory.Exists(tempDir))
            {
                Directory.CreateDirectory(tempDir);
            }
            File.Copy(targetFilePath, Path.Combine(tempDir, Path.GetFileName(targetFilePath)));
            CompressDirectoryZip(tempDir, zipFilePath);
            Directory.Delete(tempDir, true);
        }

        /// <summary>
        /// 将指定的Zip文件解压到目标文件夹
        /// </summary>
        /// <param name="zipFilePath">压缩文件路径</param>
        /// <param name="targetDir">目标文件夹路径</param>
        public static void DecompressZip(string zipFilePath, string targetDir)
        {
            if (!Directory.Exists(targetDir))
            {
                Directory.CreateDirectory(targetDir);
            }
            ZipFile.ExtractToDirectory(zipFilePath, targetDir);
        }
    }

调用示例

ZipHelper.CompressFileZip(@"E:\Publish\ZipTest\test.txt", @"E:\Publish\ZipTest\test.zip");
ZipHelper.DecompressZip(@"E:\Publish\ZipTest\test.zip", @"E:\Publish\ZipTest\");

总结

System.IO.Compression 命名空间下还有一个 ZipArchive 类,相对来说功能还是比较简陋的,如果需要更高级和更精细的压缩操作,推荐使用SharpZipLib,DotNetZip之类的第三方组件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值