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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.70
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
#1

Как считать из бинарного файла AnsiString (ifstream)? - C++

09.02.2013, 01:51. Просмотров 2739. Ответов 44
Метки нет (Все метки)

C++
1
2
3
4
5
ifstream read("Edit1.txt",std::ios::binary);
int Size;
read.read((char*)&Size,sizeof(int));
AnsiString str;
read.read((char*)&str,Size);// клингонский выводит
если str сделать char то все отлично. Можно считать прям в AnsiString? без буф. переменных
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.02.2013, 01:51
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как считать из бинарного файла AnsiString (ifstream)? (C++):

Чтение бинарного файла ifstream - C++
есть бинарный файл 10101010101111010101011011001101001010100010 нужно прочить его в массив как числа, как? спасибо

Как считать из бинарного файла - C++
Здравствуйте, я написала процедуру считывания из бинарного файла, но в результате выводится непонятный набор букв. Как сделать что бы...

Как считать числа из бинарного файла - C++
Стоит задача: записать простые числа в бинарный файл. Числа берутся из промежутка 1...n. Все сделал, но не получается вывести в консоль...

Ifstream считать из файла числа с плавающей точкой - C++
Здравствуйте форумчане. Поток std::ifstream хорошо считывает целые числа, но когда дело доходит до числе с плавающей точкой он считывает...

Считать русский текст из файла через ifstream - C++
Здравствуйте, подскажите как правильно считать русский текст из файла? (файл создан в стандартной кодировке Блокнота). Инициализирую...

ifstream (считать матрицу из файла в двумерный вектор) - C++
нужно из файла считать матрицу в двумерный вектор. файл выглядит так: 2 9 6 5 4 8 4 5 8 9 5 4 8 6 4 5 8 6 5 8 4 прошу помощи !

44
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
10.02.2013, 02:11 #31
Цитата Сообщение от Avazart Посмотреть сообщение
Это по чему же ? Пути в системы все таки имеют свои ограничения, поэтому тут вполне предсказуемо, а размер файла вполне можно определять в заголовке.
На каждой системе разные ограничения. Можно сделать, к примеру, 256 символов, из которых будет использоваться 2, ничего хорошего в этом нет.

Цитата Сообщение от Avazart Посмотреть сообщение
Есть ибо может потребоваться обратится к примеру к определенному пикселю в файле читать-изменять остальные нет необходимости.
Более того если "этих структур" много в файле то это вполне рационально.
Еще раз повторюсь, все зависит от файла. Ничего рационального в этом быть не может, так как обработка в памяти на много быстрее, чем непосредственно на жестком диске. И схема "считал один объект - обработал - записал" медленнее, чем "считал много объектов - обработал - записал".

Цитата Сообщение от Avazart Посмотреть сообщение
А как иначе со структурой ?
Не понял, если честно, этого вопроса.

evil0o, все зависит от того, что еще будет находится в файле. Почитайте о сериализации.
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
10.02.2013, 02:16 #32
evil0o, Еще раз нафига вам бинарный вид ?

Добавлено через 1 минуту
Цитата Сообщение от Toshkarik Посмотреть сообщение
И схема "считал один объект - обработал - записал" медленнее, чем "считал много объектов - обработал - записал".
У вас в файле 100 объектов вы работаете только с 2-мя первый где-то вначале файла другой в где-то в конце, зачем грузить все 100 когда можно загрузить и обработать то 2-два нужных

Добавлено через 2 минуты
Цитата Сообщение от Toshkarik Посмотреть сообщение
На каждой системе разные ограничения. Можно сделать, к примеру, 256 символов, из которых будет использоваться 2, ничего хорошего в этом нет.
Ну это не МБайты, да и размеры путей файлов не сильно так уж отличаются, зато скорость доступа и произвольность резко возрастает, чем читать все последовательно
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
10.02.2013, 02:27 #33
Цитата Сообщение от Avazart Посмотреть сообщение
Ну это не МБайты, да и размеры путей файлов не сильно так уж отличаются.
Да вот как раз Мбайты, если много мелких файлов с короткими именами. И в каком плане не сильно так уж и отличаются?

Цитата Сообщение от Avazart Посмотреть сообщение
У вас в файле 100 объектов вы работаете только с 2-мя первый где-то вначале файла другой в где-то в конце, зачем грузить все 100 когда можно загрузить и обработать то 2-два нужных
И как Вы думаете, часто такое бывает, чтоб всего 2 объекта из 100 использовались?

Цитата Сообщение от Avazart Посмотреть сообщение
Еще раз нафига вам бинарный вид ?
Человека интересует сериализация динамических структур данных, не только строк.
1
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 02:46  [ТС] #34
Цитата Сообщение от Avazart Посмотреть сообщение
evil0o, Еще раз нафига вам бинарный вид ?
сложно объяснить. ну хотя бы по тому что там будут структуры. Файлов много и они будут сливаться, разделяться, будут большими и изменять нужно в произвольном месте файла.

Добавлено через 2 минуты
Цитата Сообщение от evil0o Посмотреть сообщение
Сообщение от Avazart
Не круто делать то что не понимаешь...
это да, но надо для саморазвития как минимум. А вообще это реально, но лезет жесткий изврат с классами. не хочется самому выдумывать велосипед(и скорее всего с квадратными колесами), лучше подскажите или пример скинте.
ну так что ?

Добавлено через 2 минуты
Toshkarik, "сериализация динамических структур данных" а есть книжки или статейки хорошие на эту тему?
0
Toshkarik
1141 / 858 / 51
Регистрация: 03.08.2011
Сообщений: 2,386
Завершенные тесты: 1
10.02.2013, 02:55 #35
Если честно не встречал литературы отдельно. Но в сети достаточно статей. Поищите по запросу "c++ serialization".
0
abit
271 / 270 / 34
Регистрация: 03.02.2013
Сообщений: 754
10.02.2013, 03:21 #36
"сериализация динамических структур данных" а есть книжки или статейки хорошие на эту тему?
мне в своё время говорили что лучший мануал по сериализации у буста, я так понял речь шла об этом - http://www.boost.org/doc/libs/1_36_0/libs/serialization/doc/index.html
1
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
10.02.2013, 12:21 #37
http://wiki.shelek.ru/index.php/FAQ:...BD%D1%8B%D1%85
1
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 12:23  [ТС] #38
ок посмотрим
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
10.02.2013, 12:30 #39
Только я не особо понимаю как за счет этого можно добиться быстрого,произвольного доступа.

Бинарный архив приводить не стану не очень красочно, но занимает он 79 байт, из которых 39 - заголовок и 40 - полезная информация.
Добавлено через 5 минут
За универсальность boost::serialization придётся заплатить:
  • Во время компиляции шаблоны могут разворачиваться довольно долго.
  • Скорость: стек вызовов для сериализации какой-нибудь не слишком больной структурки, может быть просто ужасающим - вызовов 20-30.
0
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 12:38  [ТС] #40
меня тоже впечатлило. но так всегда, чем надежнее тем медленнее(исключения бывают). а буст с открытым кодом?

Добавлено через 2 минуты
шаблоны. вообще сами по себе медленно компилируемые
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
10.02.2013, 12:45 #41
Цитата Сообщение от evil0o Посмотреть сообщение
меня тоже впечатлило. но так всегда, чем надежнее тем медленнее(исключения бывают). а буст с открытым кодом?
А не фига не надежнее, вот читаю http://alenacpp.blogspot.com/2011/02/boostserialize.html - жестко зависит от версии библиотеки.

Добавлено через 5 минут
Цитата Сообщение от evil0o Посмотреть сообщение
шаблоны. вообще сами по себе медленно компилируемые
Компиляция -фигня, можно подождать... а вы ведь хотели :

Сначала:
Цитата Сообщение от evil0o Посмотреть сообщение
интересует экономия места. например одна структура весит 15 мегабайт другая 20 байт, и писать каждую по 15 мб. как то не круто
Потом :
Цитата Сообщение от evil0o Посмотреть сообщение
сложно объяснить. ну хотя бы по тому что там будут структуры. Файлов много и они будут сливаться, разделяться, будут большими и изменять нужно в произвольном месте файла.
0
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 12:56  [ТС] #42
я пока не так много читал про boost и не ковырял его(скачиваю), но судя по тому что довольно большие компании использую его в проектах, он не должен быть приемлемым(бесплатный сыр только мышеловке). Давайте обсудим есть ли другие варианты не хуже буста? а совместимость со старыми версиями меня сейчас не особо волнует, главное чтоб документация из за этого не плыла.
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
10.02.2013, 13:01 #43
Лично я не вижу необходимости использовать boost::serialization учитывая потребность в оптимизации по быстродействию...

Добавлено через 2 минуты
Цитата Сообщение от evil0o Посмотреть сообщение
а совместимость со старыми версиями меня сейчас не особо волнует,
Ну не только это ... это означает не просто то, что тяжело будет изменить код под новую версию, а
А ещё то, что при новой версии, файлы которые напИсакАла ваша программа старой версии может не читаться новой.
0
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 13:29  [ТС] #44
Avazart, решение проблемы? мне кажется есть два выхода сторонняя библиотека или самому.
Самому делать, мне кажется долго разбираться(явно не пару часов), да и велосипед.
0
Avazart
Нарушитель
Эксперт С++
7232 / 5404 / 293
Регистрация: 10.12.2010
Сообщений: 23,948
Записей в блоге: 17
10.02.2013, 13:52 #45
Цитата Сообщение от evil0o Посмотреть сообщение
Самому делать, мне кажется долго разбираться(явно не пару часов)
Ну не знаю возможно разбираться в том что написали другие займет больше времени ... и вы не знаете как оно работает, а главное не можете оптимизировать под свою задачу.

Лично я бы для начала не морочил себе голову и сделал самое легкое и простое - перегрузил операторы >> и << ( и использовал текстовый режим естественно), и если это было бы не удовлетворительно по скорости думал бы как оптимизировать.
0
10.02.2013, 13:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 13:52
Привет! Вот еще темы с ответами:

Чтение бинарного файла в поток std::ifstream и вывод в другой бинарный файл std::ofstream (создание копии) - C++
Проверил работу программы на маленькой картинке(744 байт). Все работает. С несколько бОльшими файлами(512КБ) нет. Суть задачи в том,...

Считать в строку из бинарного файла - C++
Здравствуйте! Как считать в строку данные из бинарного файла Таким образом не работает char* str; str = new char ; ...

Записать и считать информацию из бинарного файла - C++
Здравствуйте уважаемые программисты. Дано задание: Написать программу,которая создает в каталоге 2 файла - текстовый и бинарный,и...

Считать из бинарного файла в массив структур фамилию, имя, оценку по математике, оценку по информатике - C++
необходимо считать из бинарного файла в массив структур фамилию, имя, оценку по математике, оценку по информатике, оценку по физике


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

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

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