Распакуйте файл (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

Другие вопросы по тегам