Сжать файл с помощью GZipStream, сохраняя его метаданные

2

Как я могу получить расширение сжатого файла после сжатия с помощью System.IO.Compression.GZipStream?

Например, если исходный файл имеет имя test.doc и сжимается до test.gz, как узнать, какое расширение файла использовать при распаковке?

Теги:
compression

4 ответа

0
Лучший ответ

Мне пришлось это сделать некоторое время назад. Решение состоит в том, чтобы использовать библиотеки J # для этого. Вы все еще пишете его на С#.

http://msdn.microsoft.com/en-us/magazine/cc164129.aspx

Это микрософт ответит на эту тему.

  • 1
    Лично я предпочел бы использовать такую библиотеку, как SharpZipLib ( icsharpcode.net/OpenSource/SharpZipLib ) и придерживаться C #
  • 0
    Есть моменты, когда невозможно использовать открытый исходный код в разработке с закрытым исходным кодом. Это может быть не так, но предлагает решение из существующего Microsoft SDK.
5

Нет способа получить имя файла - на самом деле, возможно, никогда не будет имени файла, если, например, кусок данных создается в памяти, а затем отправляется через сетевое соединение.

Вместо замены расширения файла, почему бы не добавить его, например: test.doc.gz Затем вы можете просто отключить его при распаковке.

0

Test.gz - это просто поток сырого байта без метаданных о том, что было сжато (например, исходное имя файла, расширение и т.д.). Что вам нужно сделать, так это создать архив, содержащий поток gzip и метаданные о каждом файле, содержащемся в архиве.

Статья, связанная с ответом Mech Software, предоставляет довольно разумный способ реализовать это.

Был также этот вопрос (смутно связанный) спросил некоторое время назад, которое может помочь:

Как сжать каталог со встроенными классами сжатия .net?

0

Не уверен, в чем ваш вопрос. Я предполагаю, что вы хотите, чтобы механизм "помнил", что расширение было до сжатия?

Если это вопрос, тогда будет работать соглашение test.doc, сжимающее в test.doc.gz.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню