Разархивируйте файл во время чтения - PullRequest
3 голосов
/ 03 июля 2010

У меня есть сотни заархивированных файлов CSV. Это здорово, потому что они занимают очень мало места, но когда приходит время их использовать, мне нужно освободить место на моем HD и разархивировать их, прежде чем я смогу их обработать. Мне было интересно, можно ли с помощью .NET разархивировать файл во время чтения. Другими словами, я хотел бы открыть файл zip, начать распаковывать файл и, как мы идем, обработать файл.

Так что на моем диске больше не будет необходимости. Есть идеи или предложения?

Ответы [ 4 ]

5 голосов
/ 03 июля 2010

Да.Zip - это потоковый формат, который означает, что вы можете использовать данные при распаковке, а не распаковывать все сначала.

С классами .net System.IO.Compression вы можете применять сжатие, аналогичное используемому в zip-файлах.(Deflate & GZip) для любого потока, который вам нравится, но если вы хотите работать с реальными файлами в формате zip, вам понадобится сторонняя библиотека , такая как (sharpziplib).

1 голос
/ 03 июля 2010

sharpziplib допускает распаковку на основе потока - см. этот связанный вопрос - item предоставляет аналогичные Read основанные на потоке методы, поэтому вы можете обрабатывать каждый элемент так же, как и в любом потоке.

1 голос
/ 03 июля 2010

Лучшим решением может быть сохранение распакованных файлов на диске, но включение сжатия на уровне файловой системы.Таким образом, вы будете просто читать CSV-файлы, а ОС позаботится о том, чтобы не занимало слишком много места.

Anyhoo, чтобы ответить на ваш вопрос, возможно, класс GZipStream может вам помочь.

0 голосов
/ 03 июля 2010

Я не уверен насчет zip-файлов, но вы можете использовать формат GZ с GZipSteam (работает как любой другой поток ввода).К сожалению, все пространство имен System.IO.Compression состоит всего из 2 классов (другой выполняет DEFLATE).

EDIT: есть класс с именем ZipPackageЯ не уверен, как, если это позволит вам выполнять декомпрессионную потоковую передачу, но, возможно, стоит взглянуть на нее.

Также взгляните на # ziplib .

...