|
Вопрос # 3 235/ вопрос открыт / |
|
Доброго времени суток, уважаемые эксперты!
У меня есть архив (1,85 Гб) формата 7z, содержащий 1 файл. Хотел его извлеч, но он оказался слишком большим (313 Гб) и свободного места под такой файл у меня нету. Я думаю, есть 2 варианта: както перепаковать архив на много маленьких и независимых (проблема в том, что файл в архиве один), или читать данные непосредственно из архива.
На сколько я знаю, стандартные dll-ки для работы с 7z могут лишь распаковывать архивы целиком (или отдельные файлы) и не могут распаковать только определенную часть файла.
Не могли бы вы мне подсказать, как можно порезать 1 огромный файл внутри архива и запаковать его кусками в много маленьких независимых архивов не распаковывая файл полностью на жесткий диск?
 |
Вопрос задал: 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 (статус: Посетитель), 28 сентября 2009, 17:28 [#2]:
Файл не битый, просто в нем данные в формате xml. Потом я хотел сделать индекс по этим кусочкам (для быстрого поиска), либо сконвертировать их в другой, более "экономичный" формат.
За ссылочку, спасибо, щас посмотрю...
|
|
Вадим К (статус: Академик), 28 сентября 2009, 17:41 [#3]:
313Гб xml файл.... да... это же DOM парсер его никак не возьмет (ну если только не терабайтная оперативка). А вот SAX парсер ещё как возьмет. Более того, можно распаковывать по кусочкам и сразу на вход sax парсера, после чего например в базу. Только что там в базе? Имена-фамилии всех жителей Европы?
Галочка "подтверждения прочтения" - вселенское зло.
|
|
prgd7 (статус: Посетитель), 28 сентября 2009, 17:58 [#4]:
Ну про то, как парсить, я пока не думал... Думал, без парсеров разберу (благо данные там хорошо структурированы). А в базе не фамилии, не имена, а всего лишь вся википедия (или почти вся).
Скачал LZMA SDK для Delphi (архив LZMA.442b), но что-то разобраться не получается. Там вся документация на английском, да и пользоваться такими библиотеками у меня нет опыта. Если вы уже работали с ней, может подскажете, как с ее помощью открыть архив и прочитать очередной блок данных?
|
|
Вадим К (статус: Академик), 28 сентября 2009, 18:12 [#5]:
я с ней не работал. надо искать код, который распаковывает. то есть идти не от "как считать новый блок", а искать тот кусок кода, который пишет распакованный файл на диск.
Галочка "подтверждения прочтения" - вселенское зло.
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|