使用 SharpZipLib 制作没有文件夹结构的 .tar.gz 存档

Posted

技术标签:

【中文标题】使用 SharpZipLib 制作没有文件夹结构的 .tar.gz 存档【英文标题】:Make a .tar.gz archive without folder structure using SharpZipLib 【发布时间】:2012-12-16 09:32:07 【问题描述】:

我正在尝试使用 SharpZipLib 将文件夹中的文件列表 .tar.gz。问题在于无论如何传递文件路径——结果总是包含文件路径——而不仅仅是文件本身。我在这里错过了什么?

string filesFolder = "c:\\testfolder\\test\\";
List<string> filesToZip = new List<string>()  filesFolder +"test1", filesFolder  +"test2";

using (FileStream fs = new FileStream(filesFolder +"myGz.tar.gz" , FileMode.Create, FileAccess.Write, FileShare.None))
using (Stream gzipStream = new GZipOutputStream(fs))
using (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(gzipStream))
     
      foreach (string filename in filesToZip )
      
        
          TarEntry tarEntry = TarEntry.CreateEntryFromFile(filename);
          tarArchive.WriteEntry(tarEntry, false);
        
      
     

我得到的是“myGz.tar.gz”文件。当我尝试使用 7.zip 打开它时 - 我在存档中获得了完整的文件夹结构 - c:\testfolder\test\,并在其中 - “test1”、“test”。

如何删除文件路径?

谢谢

【问题讨论】:

这可能有用:***.com/questions/1350653/… 那是因为你也在说!为什么你认为它会以其他方式做到这一点? 在不提供完整文件路径的情况下,我没有看到任何其他添加到 tar 的方法。 M Sakher Sawan - 谢谢!它确实适用于 zip 文件 - 但我找不到 .gz 文件的 paraplel 示例 【参考方案1】:

我也遇到了同样的问题,刚找到这个问题就想通了。

关键是设置tarEntryName 属性,然后再将其添加到存档中。

TarEntry tarEntry = TarEntry.CreateEntryFromFile(filename);
tarEntry.Name = Path.GetFileName(filename);
tarArchive.WriteEntry(tarEntry, false);

【讨论】:

以上是关于使用 SharpZipLib 制作没有文件夹结构的 .tar.gz 存档的主要内容,如果未能解决你的问题,请参考以下文章

关于SharpZipLib压缩分散的文件及整理文件夹的方法

C# 制作Zip压缩包

SharpZipLib:1 不是受支持的代码页

C#工具类:使用SharpZipLib进行压缩解压文件

C#工具类:使用SharpZipLib进行压缩解压文件

SharpZipLib : 将单个文件压缩为单个压缩文件