Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 16, средняя оценка - 4.94
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
#1

Чтение полного файла в память или по кускам? - C++

08.03.2011, 15:15. Просмотров 2182. Ответов 6
Метки нет (Все метки)

Здравствуйте.
Возник такой вопрос. Как рациональнее делать в плане выигрыша процессорного времени и занятия минимального количества места?
Есть файл. С его данными надо проделать некие операции и создать новый файл того же типа, но с измененными данными. Так вот, что лучше, прочитать весь файл в буфер и там его обрабатывать или обрабатывать последовательно, читая побайтно и сразу записывая данные в новый файл?

Спасибо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.03.2011, 15:15
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение полного файла в память или по кускам? (C++):

Чтение файла TIFF в память - C++
Здравствуйте. Решил проверить простую консольную программу для чтения цветного графического файла TIFF. Код взят из руководства к...

Сравнение переменных или чтение с файла? - C++
После тестировки, выяснилось, что проблема возникает в строке указаной коментом. Хочу узнать в чем заключается ошибка.Возможно проблема...

Чтение из текстового файла одного или три значения - C++
Текстовой файл состоит из строк состоящих из 3ех или одного числовых значения. Как правильно считывать если неизвестно 3 или одно значение...

Чтение из файла строки по началу строки или ее части - C++
Всем доброго времени суток! Большая просьба помочь! поступило задание, сделать словарь. Вводишь слов в консоли, а тебе выдает перевод....

#include ,указание файла без полного пути. - C++
По сабжу,есть 2010 студия,есть чужой код.Решил сесть,разобраться,и натолкнулся на такой вариант #includeа . #include <mem/raw.h> У меня...

Из полного пути к файлу выделить только имя файла - C++
Написать программу, которая по введённому полному пути к файлу выделяла бы только имя файла (то, что следует после последнего слеша или...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.03.2011, 15:25 #2
Цитата Сообщение от Ortistx Посмотреть сообщение
прочитать весь файл в буфер и там его обрабатывать
А если файл будет размером несколько гигабайт?
Цитата Сообщение от Ortistx Посмотреть сообщение
обрабатывать последовательно, читая побайтно и сразу записывая данные в новый файл?
Побайтно обрабатывать тоже не лучший вариант.
Лучше всего использовать блочное чтение примерно по 512 байт или используя константу BUFSIZ, которая определена в stdio.h. А вообще как мне кажется максимальная скорость будет достигнута при размере блока равному размеру сектора диска или размеру одного кластера.
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 15:31  [ТС] #3
fasked, тип файла будет jpeg, поэтому максимум - это десятки мегабайт для моих целей.

Т.е. в любом случае, блочное чтение быстрее будет, чем обработка в памяти?

А что за константа BUFSIZ?
alex_x_x
бжни
2447 / 1652 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
08.03.2011, 15:37 #4
мне кажется проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
fasked
Эксперт С++
4934 / 2514 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
08.03.2011, 15:43 #5
Цитата Сообщение от Ortistx Посмотреть сообщение
А что за константа BUFSIZ?
Как мне кажется это константа определяет стандартный размер буфера для потока. Буфер можно изменить функцией setvbuf. Я могу ошибаться конечно.
Цитата Сообщение от alex_x_x Посмотреть сообщение
проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
+1, я подразумевал только средства стандартных библиотек языка.
Ortistx
1 / 1 / 0
Регистрация: 19.02.2011
Сообщений: 39
08.03.2011, 16:00  [ТС] #6
мне кажется проецирование на память средствами ос самый быстрый и удобный способ работы с большими файлами
а можно расшифровать эту фразу? Т.е. имеется ввиду все-таки самый быстрый способ все в память загружать?
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
08.03.2011, 16:28 #7
Имеются в виду файлы, отображаемые в память

Managing Memory-Mapped Files
http://msdn.microsoft.com/en-us/library/ms810613.aspx

Добавлено через 1 минуту
А вообще при таком размере - десятки мегабайт можно сильно не напрягаться
Читаем весь файл целиком в память одним read()

Memory-mapped files начинают помогать когда размер файлов несколько больше чем десятки мегабайт
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.03.2011, 16:28
Привет! Вот еще темы с ответами:

Выделить из полного имени файла название последнего каталога - C++
Дана строка, содержащая полное имя файла. Выделить из этой строки название последнего каталога (без символов «\»). Если файл содержится в...

Разобрать строку по кускам - C++
Здравствуйте! Помогите, пожалуйста, разобраться с токенами делящими строку на части. Есть вот такая функция, которая должна возвращать...

Переделать в коде чтение из файла в чтение с клавиатуры - C++
Переделайте что бы текст считывался с клавиатуры, а не с файла! Буду благодарен за помощь! //файл должен начинаться со слова, между...

Чтение файла с данными типа real. Тип real в билдере или как его "обойти"? - C++
Читаю файл в структуру, double Fdat; struct STR { ... } rec


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.03.2011, 16:28
Ответ Создать тему
Опции темы

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