写在前面
无需其他第三方组件,使用微软自带的类型就可以实现对文件的压缩和解压。
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之类的第三方组件。
本文介绍了如何在C#中利用System.IO.Compression命名空间中的方法进行文件的压缩和解压,包括ZipHelper类的使用示例,并提到了对于更复杂需求时推荐使用第三方组件如SharpZipLib和DotNetZip。

256

被折叠的 条评论
为什么被折叠?



