在ASP.NET中,压缩和解压缩ZIP文件是一个常见需求,通常用于节省存储空间、减少网络传输时间或打包和分发文件,以下是几种实现方法的详细讲解:

方法一:使用System.IO.Packaging命名空间
1. 添加引用
需要在项目中添加对WindowsBase.dll程序集的引用。
2. 压缩文件夹为ZIP文件
using System;
using System.IO;
using System.IO.Packaging;
public static class CompressionUtility
{
public static bool CompressFolderUsingSystemIOPackaging(string folderName, string compressedFileName, bool overrideExisting)
{
if (!Directory.Exists(folderName)) return false;
// 创建ZipPackage并写入文件
using (var package = Package.Open(compressedFileName, FileMode.Create, FileAccess.ReadWrite, FileShare.None))
{
foreach (var file in Directory.GetFiles(folderName, "*", SearchOption.AllDirectories))
{
var partUri = PackagingUriHelper.CreatePartUri(new Uri(file.Replace(folderName, ""), UriKind.Relative));
var part = package.CreatePart(partUri, GetContentType(file), overrideExisting ? FileMode.Create : FileMode.CreateNew);
using (var stream = File.OpenRead(file))
using (var targetStream = part.GetStream())
{
stream.CopyTo(targetStream);
}
}
}
return true;
}
private static string GetContentType(string filePath)
{
// 返回文件的MIME类型
string contentType = "application/octet-stream";
return contentType;
}
}方法二:使用第三方库SharpZipLib
1. 下载并引用SharpZipLib库
可以从NuGet包管理器安装SharpZipLib库。

2. 解压ZIP文件
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using ICSharpCode.SharpZipLib.Zip;
public class UnZipClass
{
public void UnZip(string[] args)
{
ZipInputStream s = new ZipInputStream(File.OpenRead(args[0]));
try
{
ZipEntry theEntry;
while ((theEntry = s.GetNextEntry()) != null)
{
string directoryName = Path.GetDirectoryName(args[1]);
string fileName = Path.GetFileName(theEntry.Name);
if (directoryName != String.Empty)
Directory.CreateDirectory(directoryName);
if (fileName != String.Empty)
{
FileStream streamWriter = File.Create(args[1] + fileName);
int size = 2048;
byte[] data = new byte[2048];
while (true)
{
size = s.Read(data, 0, data.Length);
if (size > 0)
{
streamWriter.Write(data, 0, size);
}
else
{
break;
}
}
streamWriter.Close();
}
}
s.Close();
}
catch (Exception eu)
{
throw eu;
}
finally
{
s.Close();
}
}
}方法三:使用System.IO.Compression命名空间(推荐)
1. 添加引用
从.NET Framework 4.5开始,System.IO.Compression命名空间提供了ZipArchive和ZipFile类。
2. 压缩文件夹为ZIP文件
using System;
using System.IO;
using System.IO.Compression;
public static class CompressionUtility
{
public static void CompressFolderUsingSystemIOCompression(string sourceDirectoryName, string zipFileName)
{
ZipFile.CreateFromDirectory(sourceDirectoryName, zipFileName);
}
}3. 解压ZIP文件到指定目录
using System;
using System.IO;
using System.IO.Compression;
public static class CompressionUtility
{
public static void ExtractZipFileUsingSystemIOCompression(string zipFileName, string destinationDirectoryName)
{
ZipFile.ExtractToDirectory(zipFileName, destinationDirectoryName);
}
}相关问题与解答栏目
问题1:如何在ASP.NET中使用System.IO.Compression命名空间来压缩一个文件夹?

解答: 可以使用ZipFile.CreateFromDirectory方法来实现。
ZipFile.CreateFromDirectory("path/to/folder", "path/to/output.zip");这种方法简单且高效,适合大多数场景。
问题2:在使用SharpZipLib进行解压时,如何确保目标目录存在?
解答: 在使用UnZipClass类的UnZip方法之前,可以先检查并创建目标目录。
if (!Directory.Exists(destinationDirectory))
{
Directory.CreateDirectory(destinationDirectory);
}各位小伙伴们,我刚刚为大家分享了有关“asp压缩zip”的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/48272.html<
