Вот что я хочу сделать:
Вот что я хочу сделать: p>
Выберите существующий файл ISO.
Загрузите XML-файл по URL-адресу (для которого у меня уже есть метод).
Добавьте загруженный XML-файл в ISO.Сохраните обновленный ISO в новый файл.
Я хочу сохранить существующее содержимое ISO при добавлении нового файла.
Что я пробовал:
Я использовал библиотеку DiscUtils, чтобы открыть существующий файл ISO, добавил новый файл XML в ISO, а затем сохранил обновленный ISO в новый файл. Ниже приведен код, который я использовал:
Код: Выделить всё
using System;
using System.IO;
using System.Net.Http;
using System.Threading.Tasks;
using DiscUtils.Iso9660;
public async Task UpdateIsoWithXmlAsync(string isoFilePath, string xmlFilePath, string outputIsoPath)
{
using (FileStream isoStream = File.OpenRead(isoFilePath))
using (FileStream outputIsoStream = File.Create(outputIsoPath))
{
CDBuilder builder = new CDBuilder();
builder.UseJoliet = true;
builder.UseRockRidge = true;
// Read the existing ISO content
using (CDReader cdReader = new CDReader(isoStream, true))
{
foreach (string filePath in cdReader.GetFiles("/"))
{
string relativePath = filePath.TrimStart('/');
using (Stream fileStream = cdReader.OpenFile(filePath, FileMode.Open, FileAccess.Read))
{
builder.AddFile(relativePath, fileStream);
}
}
}
// Add the new XML file
builder.AddFile("file.xml", xmlFilePath);
// Build the updated ISO
builder.Build(outputIsoStream);
}
}
Я ожидал, что обновленный ISO будет содержать все исходные файлы из выбранного ISO, включая добавленный XML-файл. Размер нового ISO должен быть близок к исходному размеру, при этом новый XML-файл будет добавлен в соответствующее место.
Что произошло на самом деле:
Полученный ISO намного меньше ожидаемого (около 3,81 МБ), и исходное содержимое, похоже, не скопировано правильно. Вместо изменения исходного ISO создается впечатление, что был создан новый ISO, содержащий только XML-файл. Кроме того, размер ISO значительно уменьшен.
Подробнее здесь: https://stackoverflow.com/questions/791 ... updated-is