Добавление файлов в архив Tar без копирования структуры родительского файла
Я создаю игру, в которой пользователь может создавать собственный контент. С каждым пользовательским созданием связаны два файла: файл.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);
}
}
Это не дает никаких ошибок, но когда я открываю файл.krs как.tar, используя 7zip, файлы зарываются под ВСЕМИ родительскими каталогами исходных файлов, которые были скопированы в архив. Например, путь к файлу "data.xml" в файле.tar - "C:\Users\me\Desktop\UserData\songs\songName\data.xml".
Я хочу открыть файл.tar, и там нет директории верхнего уровня - только два файла. Например, файл data.xml в архиве.tar должен быть просто "data.xml".
Я знаю, что это достижимо, потому что я могу сделать это вручную, используя 7zip. Как я могу сделать это, используя библиотеку SharpZipLib в C#? Я нашел этот ответ, который, кажется, решает мою проблему, но он написан на Python, языке, который я не понимаю.
РЕДАКТИРОВАТЬ: Я сделал еще несколько поисков и нашел этот ответ. Я попробовал решение, и оно забрало все, кроме первого родительского каталога файлов (".tar: parentFolder\data.xml"). Можно ли удалить это, чтобы избежать необходимости копать, когда я извлекаю эти файлы позже?
1 ответ
При тестировании ответа, который я разместил в своем редактировании, я обнаружил, что при извлечении файлов они выходят сами по себе и не попадают в папку. Это ответ, который я искал.