Gzip 一个目录,该目录具有使用 GZipStream 类和 C# 的子目录
本文关键字:GZipStream 类和 子目录 一个 Gzip | 更新日期: 2023-09-27 17:56:23
此 MSDN 站点有一个 gzip 文件的示例。那么,如何压缩包含子目录的整个目录?
由于 gzip 仅适用于文件,我建议您 tar 您的目录,然后 gzip 生成的 tar 文件。
您可以使用tar-cs或SharpZipLib来生成tar文件。
你不能!
GZip 是为文件创建的,而不是为目录创建的:)
gzip 在 simgle 流上运行。 要使用 gzipstream 创建多流(多文件)存档,您需要包含自己的索引。 基本上,最简单的方法是将文件偏移量写入输出流的开头,然后当您读回它时,您知道边界在哪里。 此方法与 PKZIP 不兼容。 为了兼容,您必须阅读并实现 ZIP 格式......或者使用像SharpZip这样的东西,或者 Zip.NET
可以在纯 .NET 3.0 中压缩目录。由于修改后的GPL许可证,使用SharpZipLib可能是不可取的。
首先,您需要引用WindowsBase.dll。
此代码将打开或创建一个 zip 文件,在其中创建一个目录,并将该文件放在该目录中。如果要压缩文件夹(可能包含子目录),可以遍历目录中的文件,并为每个文件调用此方法。然后,您可以先深入搜索子目录中的文件,为每个文件调用方法,并传入路径以在 zip 文件中创建该层次结构。
public void AddFileToZip(string zipFilename, string fileToAdd, string destDir)
{
using (Package zip = System.IO.Packaging.Package.Open(zipFilename, FileMode.OpenOrCreate))
{
string destFilename = "." + destDir + "''" + Path.GetFileName(fileToAdd);
Uri uri = PackUriHelper.CreatePartUri(new Uri(destFilename, UriKind.Relative));
if (zip.PartExists(uri))
{
zip.DeletePart(uri);
}
PackagePart part = zip.CreatePart(uri, "", CompressionOption.Normal);
using (FileStream fileStream = new FileStream(fileToAdd, FileMode.Open, FileAccess.Read))
{
using (Stream dest = part.GetStream())
{
CopyStream(fileStream, dest);
}
}
}
}
destDir 可以是一个空字符串,它将文件直接放在 zip 中。
来源:https://weblogs.asp.net/jongalloway/creating-zip-archives-in-net-without-an-external-library-like-sharpziplib
https://weblogs.asp.net/albertpascual/creating-a-folder-inside-the-zip-file-with-system-io-packaging