将文件添加到Tar存档而不复制父文件结构

时间:2018-06-07 22:52:18

标签: c# tar sharpziplib

我正在创建一个用户可以创建自定义内容的游戏。每个自定义创建都有两个文件:.ogg文件和.xml文件。以前,我有一个包含所有相关文件的文件夹,但我想将所有相关文件包装在.tar文件中。

使用以下代码,我可以创建一个.tar存档(使用自定义扩展名" .krs"):

        FileInfo[] filesInDirectory = folder.GetFiles();
        string tarArchiveName = @"C:\Users\me\Desktop\UserData\songs\songName.krs";

        using (Stream targetStream = new GZipOutputStream(File.Create(tarArchiveName)))
        using (TarArchive tarArchive = TarArchive.CreateOutputTarArchive(targetStream, TarBuffer.DefaultBlockFactor))
        {
            foreach (FileInfo file in filesInDirectory)
            {
                TarEntry entry = TarEntry.CreateEntryFromFile(file.FullName);
                tarArchive.WriteEntry(entry, false);
            }
        }

这不会给出任何错误,但是当我使用7zip将.krs文件作为.tar打开时,这些文件将隐藏在复制到存档的原始文件的所有父目录下。例如," data.xml"的路径.tar文件中的文件是" C:\ Users \ me \ Desktop \ UserData \ songs \ songName \ data.xml"。

我想打开.tar文件,没有顶级目录 - 只有两个文件。例如,.tar存档中的data.xml文件应该只是" data.xml"。

我知道这是可以实现的,因为我可以使用7zip手动完成。如何在C#中使用SharpZipLib库?我发现this答案似乎解决了我的问题,但它是用Python编写的,这是一种我不了解的语言。

编辑:我做了一些搜索并找到this回答。我尝试了解决方案,它除了文件的第一个父目录(" .tar:parentFolder \ data.xml")之外的所有东西都被删除了。是否有可能删除它以避免在我稍后提取这些文件时进行任何挖掘?

1 个答案:

答案 0 :(得分:1)

在测试我在编辑中发布的answer时,我发现在提取文件时,它们会自行出现而不会进入文件夹。这是我正在寻找的答案。