使用 C# 中的 GZipStream 类对包含子目录的目录进行 Gzip 压缩?
此 MSDN 站点有一个 gzip 的示例文件。那么,如何对包含子目录的整个目录进行 gzip 压缩呢?
This MSDN site has an example to gzip a file. Then, how can I gzip a whole directory with sub directories in it?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
由于 gzip 仅适用于文件,因此我建议您 tar 目录,然后 gzip 生成的 tar 文件。
您可以使用 tar-cs 或 SharpZipLib 生成 tar 文件。
Since gzip only works on files, I suggest you tar your directory and then gzip the generated tar file.
You can use tar-cs or SharpZipLib to generate your tar file.
你不能!
GZip 是为文件而不是目录创建的:)
You can't !
GZip was created for file, not directories :)
gzip 在单一流上运行。要使用 gzipstream 创建多流(多文件)存档,您需要包含自己的索引。基本上,最简单的方法是将文件偏移量写入输出流的开头,然后当您读回它时,您就知道边界在哪里。此方法与 PKZIP 不兼容。为了兼容,您必须阅读并实现 ZIP 格式...或使用 SharpZip 或 Zip.NET 之类的东西
gzip operates on a simgle stream. To create a multi-stream (multi-file) archive using the gzipstream you need to include your own index. Basicly, at its simplest you would write the file offsets to the beginning of the output stream and then when you read it back in you know where the boundaries are. This method would not be PKZIP compatible. To be compatible you would have to read and implement the ZIP format... or use something like SharpZip, or Zip.NET
您可以在纯 .NET 3.0 中压缩该目录。由于修改了 GPL 许可证,使用 SharpZipLib 可能并不理想。
首先,您需要对 WindowsBase.dll 的引用。
此代码将打开或创建一个 zip 文件,在其中创建一个目录,并将文件放入该目录中。如果要压缩可能包含子目录的文件夹,您可以循环遍历目录中的文件并为每个文件调用此方法。然后,您可以深度优先搜索子目录中的文件,为每个子目录调用方法并传入路径以在 zip 文件中创建该层次结构。
destDir 可以是一个空字符串,它将文件直接放在 zip 中。
资料来源:
https:// weblogs.asp.net/jongalloway/creating-zip-archives-in-net-without-an-external-library-like-sharpziplib
https://weblogs. asp.net/albertpascual/在带有系统 io-packaging 的 zip 文件内创建文件夹
You can zip the directory in pure .NET 3.0. Using SharpZipLib may not be desirable due to the modified GPL license.
First, you will need a reference to WindowsBase.dll.
This code will open or create a zip file, create a directory inside, and place the file in that directory. If you want to zip a folder, possibly containing sub-directories, you could loop through the files in the directory and call this method for each file. Then, you could depth-first search the sub-directories for files, call the method for each of those and pass in the path to create that hierarchy within the zip file.
destDir could be an empty string, which would place the file directly in the zip.
Sources:
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