Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 3 235

/ вопрос открыт /

Доброго времени суток, уважаемые эксперты!
У меня есть архив (1,85 Гб) формата 7z, содержащий 1 файл. Хотел его извлеч, но он оказался слишком большим (313 Гб) и свободного места под такой файл у меня нету. Я думаю, есть 2 варианта: както перепаковать архив на много маленьких и независимых (проблема в том, что файл в архиве один), или читать данные непосредственно из архива.
На сколько я знаю, стандартные dll-ки для работы с 7z могут лишь распаковывать архивы целиком (или отдельные файлы) и не могут распаковать только определенную часть файла.
Не могли бы вы мне подсказать, как можно порезать 1 огромный файл внутри архива и запаковать его кусками в много маленьких независимых архивов не распаковывая файл полностью на жесткий диск?

prgd7 Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: prgd7 (статус: Посетитель)
Вопрос отправлен: 28 сентября 2009, 16:52
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 5; последнее сообщение — 28 сентября 2009, 18:12; участников в обсуждении: 2.
Вадим К

Вадим К (статус: Академик), 28 сентября 2009, 17:06 [#1]:

Странный конечно вопрос. Есть подозрение что либо файл "разреженный" (это такой вид файлов, когда в нем могут существовать незаполненые области. То есть файл может выдавать размер сотни гигабайт, а реальной полезной информации в нем может быть пару байт. Чтение остальных байт будет возвращать ошибку. На диске такой файл будет занимать мало места и качественно архивироваться), либо просто битый.
По поводу того, что бы распаковывать кусочками... А что потом с этими кусочками будете делать? смотреть?
Я не помню, что бы этот архиватор поддерживал такую функциональность, но можно зайти с другой стороны. Вот его сдк http://7-zip.org.ua/sdk.html (там даже для делфи есть!).
Берем код распаковки, и не пишем сразу в файл, а пишем буфер памяти (или временный файл). как только до какого то размера дойдет (мегабайт 100, или больше), копируем то что получилось и архивируем.
Галочка "подтверждения прочтения" - вселенское зло.
prgd7

prgd7 (статус: Посетитель), 28 сентября 2009, 17:28 [#2]:

Файл не битый, просто в нем данные в формате xml. Потом я хотел сделать индекс по этим кусочкам (для быстрого поиска), либо сконвертировать их в другой, более "экономичный" формат.
За ссылочку, спасибо, щас посмотрю...
Вадим К

Вадим К (статус: Академик), 28 сентября 2009, 17:41 [#3]:

313Гб xml файл.... да... это же DOM парсер его никак не возьмет (ну если только не терабайтная оперативка). А вот SAX парсер ещё как возьмет. Более того, можно распаковывать по кусочкам и сразу на вход sax парсера, после чего например в базу. Только что там в базе? Имена-фамилии всех жителей Европы?
Галочка "подтверждения прочтения" - вселенское зло.
prgd7

prgd7 (статус: Посетитель), 28 сентября 2009, 17:58 [#4]:

Ну про то, как парсить, я пока не думал... Думал, без парсеров разберу (благо данные там хорошо структурированы). А в базе не фамилии, не имена, а всего лишь вся википедия (или почти вся).
Скачал LZMA SDK для Delphi (архив LZMA.442b), но что-то разобраться не получается. Там вся документация на английском, да и пользоваться такими библиотеками у меня нет опыта. Если вы уже работали с ней, может подскажете, как с ее помощью открыть архив и прочитать очередной блок данных?
Вадим К

Вадим К (статус: Академик), 28 сентября 2009, 18:12 [#5]:

я с ней не работал. надо искать код, который распаковывает. то есть идти не от "как считать новый блок", а искать тот кусок кода, который пишет распакованный файл на диск.
Галочка "подтверждения прочтения" - вселенское зло.

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:45
Выполнено за 0.02 сек.