Распакуйте файл (odt или docx) в поток памяти
Я занимаюсь разработкой веб-приложения на Asp.Net и использую SharpZipLib для работы с файлами odt (из Open Office) и в будущих файлах docx (для MS Office). Мне нужно открыть odt-файл (например, zip-файл), изменить внутри него xml-файл, снова заархивировать и передать его в браузер, отправив моему клиенту.
Я могу сделать это в файловой системе, но она временно освободит место на моем диске, а мы этого не хотим. Я хотел бы сделать это в памяти (с классом MemoryStream), но я не знаю, как разархивировать папки / файлы в потоке памяти с SharpZipLib, изменить и использовать его, чтобы снова сжать. Есть ли образец о том, как это сделать?
Спасибо
1 ответ
Вы можете использовать что-то вроде
Stream inputStream = //... File.OpenRead(...);
//for read file
ZipInputStream zipInputStream = new ZipInputStream(inputStream));
//for output
MemoryStream memoryStream = new MemoryStream();
using ( ZipOutputStream zipStream = new ZipOutputStream(memoryStream))
{
ZipEntry entry = new ZipEntry("...");
//...
zipStream.PutNextEntry(entry);
zipStream.Write(data, 0, data.Length);
//...
zipStream.Finish();
zipStream.Close();
}
Редактировать::
В общем, вам нужно распаковать ваш файл, получить ZipEntry, изменить и записать в ZipOutputStream с помощью MemoryStream. Используйте эту статью http://www.codeproject.com/KB/cs/Zip_UnZip.aspx