Я создаю игру, в которой пользователь может создавать собственный контент. С каждым созданием по индивидуальному заказу связано два файла: файл .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"). Можно ли удалить и это, чтобы не копаться при извлечении этих файлов позже?