Распакуйте файл (odt или docx) в поток памяти - PullRequest
0 голосов
/ 22 ноября 2011

Я занимаюсь разработкой веб-приложения для Asp.Net и использую SharpZipLib для работы с файлами odt (из Open Office) и в будущих файлах docx (для MS Office). Мне нужно открыть odt-файл (например, zip-файл), изменить внутри него xml-файл, снова заархивировать и передать его в браузер, отправив моему клиенту.

Я могу сделать это в файловой системе, но он временно получит место на моем диске, и мы этого не хотим. Я хотел бы сделать это в памяти (с классом MemoryStream), но я не знаю, как разархивировать папки / файлы в потоке памяти с SharpZipLib, изменить и использовать его, чтобы снова сжать. Есть ли образец того, как это сделать?

Спасибо

1 Ответ

0 голосов
/ 22 ноября 2011

Вы можете использовать что-то вроде

 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

...