.net 压缩文件夹和解压

1、使用 ICSharpCode.SharpZipLib 压缩还原可以实现功能,但在发布程序或者调试程序时报“不能加载这个dll库

2、使用 System.IO.Compression.FileSystem.dll 也可以实现,不过这是点Net 4.5 版本才能使用

3、还是第三种比较好用:使用 WindowsBase.dll 压缩和解压

使用命名空间 using System.IO.Packaging;

/// <summary>
/// 压缩文件夹
/// </summary>
/// <param name="SourceCompressFolder">要压缩的文件夹</param>
/// <param name="CompressFileName">压缩文件名称</param>
public static bool CompressFile(string SourceCompressFolder, string CompressFileName, bool IsOverride)
{
if (SourceCompressFolder.EndsWith(@"\"))
SourceCompressFolder = SourceCompressFolder.Remove(SourceCompressFolder.Length - 1);
bool result = false;
if (!Directory.Exists(SourceCompressFolder))
return result;
if (!IsOverride && File.Exists(CompressFileName))
return result;
try
{
using (Package package = Package.Open(CompressFileName, FileMode.Create))
{
var fileList = Directory.EnumerateFiles(SourceCompressFolder, "*", SearchOption.AllDirectories);
foreach (string fileName in fileList)
{
string pathInPackage;
pathInPackage = Path.GetDirectoryName(fileName).Replace(SourceCompressFolder, string.Empty) + "/" + Path.GetFileName(fileName);

Uri partUriDocument = PackUriHelper.CreatePartUri(new Uri(pathInPackage, UriKind.Relative));
PackagePart packagePartDocument = package.CreatePart(partUriDocument, "", CompressionOption.Maximum);
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
fileStream.CopyTo(packagePartDocument.GetStream());
}
}
}
result = true;
}
catch (Exception e)
{
throw new Exception("Error zipping folder " + SourceCompressFolder, e);
}
return result;
}

 

/// <summary>
/// 解压文件夹
/// </summary>
/// <param name="folderName">目标文件夹</param>
/// <param name="compressedFileName">压缩包名称</param>
/// <param name="overrideExisting">是否替换</param>
/// <returns></returns>
public static bool UncompressFile(string TargetFolder, string CompressFile, bool overrideExisting)
{
bool result = false;
try
{
if (!File.Exists(CompressFile))
return result;

DirectoryInfo directoryInfo = new DirectoryInfo(TargetFolder);
if (!directoryInfo.Exists)
directoryInfo.Create();

using (Package package = Package.Open(CompressFile, FileMode.Open, FileAccess.Read))
{
foreach (PackagePart packagePart in package.GetParts())
{
ExtractPart(packagePart, TargetFolder, overrideExisting);
}
}

result = true;
}
catch (Exception e)
{
throw new Exception("Error unzipping file " + CompressFile, e);
}

return result;
}

public static void ExtractPart(PackagePart packagePart, string targetDirectory, bool overrideExisting)
{
string stringPart = targetDirectory + packagePart.Uri.ToString();

if (!Directory.Exists(Path.GetDirectoryName(stringPart)))
Directory.CreateDirectory(Path.GetDirectoryName(stringPart));

if (!overrideExisting && File.Exists(stringPart))
return;
using (FileStream fileStream = new FileStream(stringPart, FileMode.Create))
{
packagePart.GetStream().CopyTo(fileStream);
}
}

转载于:https://www.cnblogs.com/wangye520/p/8609872.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值