2010-07-03 5 views
3

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

Таким образом, нет необходимости в дополнительном пространстве на моем диске. Любые идеи или предложения?

ответ

5

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

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

1

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

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

+0

Хороший вопрос! Я хотя об этом, но я получаю файлы каждую неделю на DVD ... – Martin

0

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

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

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

1

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

Смежные вопросы