.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);
}
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM