【发布时间】:2018-11-17 22:56:56
【问题描述】:
我正在创建一个游戏,用户可以在其中创建自定义内容。每个自定义创建都有两个文件:一个 .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 打开时,这些文件将隐藏在复制到存档的原始文件的所有父目录下。例如,.tar 文件中“data.xml”文件的路径为“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”)之外的所有内容。是否也可以删除它以避免稍后在提取这些文件时进行任何挖掘?
【问题讨论】:
标签: c# tar sharpziplib