Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
1

Чтение огромных файлов

18.07.2009, 21:12. Показов 2151. Ответов 16
Метки нет (Все метки)

Необходимо выполнять работу с огромными файлами(например в несколько Гб), чтобы после чтения обработать и вывести все в клиенсткую область(mfc приложение), естественно заливать все в память не нужно, да и не получиться... подскажите, пожалуйста, по какому принципу выполнять чтение, может есть статьи какие, ссылки, что можете посоветовать почитать. сначала хотел все организовать так: читаю какой-то кусок, обрабатываю и т.п., заполняю, а при скроллинге дочитываю еще, при том чтобы общий объем выведенного не превышал по размеру считаное с самого начала, вот... но потом запустил одно установленное у меня приложение(на тот момент в памяти приложение занимало около 5мб), загрузил в него файл размером порядка 100мб, при этом занимаемый приложением объем в памяти учеличился где-то на 1-2мб, после этого удалил загруженный файл(с жесткого диска) и приложение нормально работало, как будто файл был загружен в память. вот может кто знает где что по этому поводу почитать можно, может кто подскажет) а windjview, кстати, все в память заливает
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.07.2009, 21:12
Ответы с готовыми решениями:

Как организовать чтение ОГРОМНЫХ (>2Gb) файлов?
Подскажите пожалуйста каким образом организовать чтение больших текстовых файлов в VB.NET. Размеры...

Чтение и запись в двумерный массив огромных файлов
Если в кратце то есть очень большой файла в длину и ширину. Написал программку ,но когда слишком...

Обработка огромных файлов
Есть 2 файла бд по 130 млн записей, один вида: id:hash, второй hash:unhash Задача такова, значение...

Запись огромных файлов
Надо очень большой файл забить генерируемой инфой. Есть два варианта: Через проекцию; Записывать...

16
Эксперт С++
2252 / 767 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
18.07.2009, 21:34 2
Ключевая фраза - Memory mapped files. тут можно посмотреть msdn, или почитать еще что-нибудь где-нибудь.
1
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
18.07.2009, 21:40  [ТС] 3
Спасибо большое! Рихтера обязательно почитаю, а если мне WinApi не подходит по причине переносимости, тогда как быть ?
0
Эксперт С++
2252 / 767 / 25
Регистрация: 27.05.2008
Сообщений: 1,496
18.07.2009, 21:52 4
Ну если MFC приложение - о переносимости большей чем у WinAPI не может быть и речи.. общего способа я не знаю,но может он и есть. В крайнем случае можно повыпендриваться с дефайнами, написав варианты под виндоус и линукс.
0
Эксперт С++
7175 / 3234 / 79
Регистрация: 17.06.2009
Сообщений: 14,164
20.07.2009, 09:03 5
Если у тебя MFC-приложение, то о какой переносимости в Linux/BSD/Unix может вообще идти речь ?

Что касается memory mapped files - то все это есть под Unix, код писать проще чем в Windows.

Чтобы тебе что-то посоветовать желательно указать в общих чертах что вообще делает твое приложение с огромными файлами ?
0
11 / 11 / 2
Регистрация: 18.07.2009
Сообщений: 123
20.07.2009, 12:26  [ТС] 6
Переносиомсть я указал не имея ввиду мое конкретное приложение, уважаемый товарищ, odip... меня просто интересовал способ организации альтернативы этого самого memory mapped files не касаясь WinApi...
0
MCSD: APP BUILDER
8791 / 1070 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
20.07.2009, 12:40 7
меня просто интересовал способ организации альтернативы этого самого memory mapped files не касаясь WinApi...
_fseeki64
0
Эксперт С++
7175 / 3234 / 79
Регистрация: 17.06.2009
Сообщений: 14,164
20.07.2009, 14:14 8
меня просто интересовал способ организации альтернативы этого самого memory mapped files не касаясь WinApi...
Под UNIX есть memory mapped files - смотреть в сторону функций mmap(), munmap().

fseek() - это не совсем то, но для эмуляции mmap годится.
0
MCSD: APP BUILDER
8791 / 1070 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
20.07.2009, 14:35 9
odip,
fseek() - это не совсем то

читай первое сообщение. аффтару нужно
выполнять работу с огромными файлами(например в несколько Гб)
0
Эксперт С++
7175 / 3234 / 79
Регистрация: 17.06.2009
Сообщений: 14,164
20.07.2009, 15:15 10
читай первое сообщение. аффтару нужно
выполнять работу с огромными файлами(например в несколько Гб)
Я так понял он спрашивает как сделать memory mapped на Unix.

Кстати тогда лучше использовать fseeko() - это более портабельно, чем _fseeki64().
0
MCSD: APP BUILDER
8791 / 1070 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
20.07.2009, 15:17 11
про unix и mmf - это ты мОщно телепатнул, преклоняюсь
0
7 / 7 / 1
Регистрация: 22.07.2009
Сообщений: 104
22.07.2009, 13:32 12
Ну что касается мапинга то его размер ограничивается адресным пространством процесса. Т.е. 2 Гб (32битное пользовательское пространство) минус 64 кб нижних адресов минус пространство уже занятое какими-то данными (а без этого не бывает).
Вопрос чтения больших файлов актуален и по сей день. Мне самому интересно как читать файл в несколько ГБ. Особенно если пишешь свой редактор аля блокнот. Читать (мапить) можно конечно кусками. Но как без лагов скролить файл размеров в несколько гигов, особенно если используется стандартный эдит (ричэдит)?
0
MCSD: APP BUILDER
8791 / 1070 / 104
Регистрация: 17.06.2006
Сообщений: 12,603
22.07.2009, 13:45 13
Но как без лагов скролить файл размеров в несколько гигов, особенно если используется стандартный эдит (ричэдит)?
Думаю что в таком случае нужно переопределять логику работы контрола (сабклассинг) чтобы подпихивать ему данные по необходимости.
0
Эксперт С++
7175 / 3234 / 79
Регистрация: 17.06.2009
Сообщений: 14,164
22.07.2009, 13:55 14
Я думаю стандартные компоненты не годятcя.
Текстовый редактор UltraEdit работает с файлами в несколько Gb.
0
7 / 7 / 1
Регистрация: 22.07.2009
Сообщений: 104
22.07.2009, 14:02 15
Короче говоря надо пробовать, тут задали неплохую тему для упражнений.
0
2342 / 498 / 22
Регистрация: 01.04.2009
Сообщений: 2,200
22.07.2009, 14:03 16
Цитата Сообщение от resource Посмотреть сообщение
Но как без лагов скролить файл размеров в несколько гигов, особенно если используется стандартный эдит (ричэдит)?
да где проблема-то?
ремэппинг куска файла занимает несколько миллисекунд.
делал я такой... давно...
тогда тоже интересно было.
0
7 / 7 / 1
Регистрация: 22.07.2009
Сообщений: 104
22.07.2009, 14:15 17
Есть ещё один интересный, в этом плане, товарищ - старина хью версии 6.11 и иже с ним. 16-битная софтина досовского посола не знала не про какие мапинги, а тормозов при скролинге вообще не ведает.
Справедливости ради надо сказать что там и скролбара конечно никакого нет, но подгружать без мапинга куски файла (не лагая) это уже круто
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.07.2009, 14:15

Сравнение двух огромных (!) файлов
Привет. Потребовалось сравнивать текстовые файлы (несколько файлов сравниваются с другим): Файл...

Отправка огромных файлов по socket
Всем очередной привет :) Уделив поискам очень достаточно много время (ну как и всегда) для решения...

В каком из файлов и где сменить права на чтение файлов (пользователи и группы) Apache2?
/etc/apache2/ |-- apache2.conf | `-- ports.conf |-- mods-enabled | |-- *.load | ...

Чтение файлов, запись и дозапись в файл, поиск файлов в каталоге и поиск данных в файле
2. Создать файлы, в которых будут вмещаться строки с именами студентов и их средними балами. Каждый...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.