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

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

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

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

09.02.2013, 01:51. Просмотров 2860. Ответов 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
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
09.02.2013, 23:19 #16
Цитата Сообщение от DU Посмотреть сообщение
File.write((char*)str.data(),size);
Так делать нельзя. string::data возвращает константный указатель на массив символов, идентичный строке. Без буфера никак нельзя напрямую записать из бинарного файла в std::string.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
09.02.2013, 23:23 #17
Если будет буфер то идея будет беспонтовой : хранить дополнительно размер строки в файле + затраты на выделение памяти под буфер.

Собственно нафига тогда бинарность ?
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
09.02.2013, 23:35 #18
Все зависит от того, что за файл. Выбор контейнера никак не зависит от того, бинарный файл, или нет.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
09.02.2013, 23:36 #19
Для бинарного файла непонятно вообще зачем использовать контейнер строк, разве что они уж сильно длинные и их много, а "навигация" по ним должна быть быстрой.
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
09.02.2013, 23:43 #20
Ну а почему нет? Намного удобней использование и манипуляция. Если файл, допустим, какой то простой архив ресурсов, и в нем записаны имена файлов и относительные пути, ну и сами файлы в сыром виде, то выбор std::string очевиден.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
09.02.2013, 23:45 #21
Цитата Сообщение от Toshkarik Посмотреть сообщение
Ну а почему нет? Намного удобней использование и манипуляция. Если файл, допустим, какой то простой архив ресурсов, и в нем записаны имена файлов и относительные пути, ну и сами файлы в сыром виде, то выбор std::string очевиден.
Зачем тогда двоичный вид?
Отладить/использовать легче в текстовом виде.

А если в двоичном опять же сформировать структуру если можно связать данные в блоки конечно.
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
09.02.2013, 23:50 #22
Avazart, как вы представляете хранение сырых данных, то есть самих файлов ( картинки, звуки и тд ) в текстовом представлении?
В начале файла, к примеру, идут имена, размеры и смещение до сырого блока данных файла.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
09.02.2013, 23:53 #23
При чем тут сам файлы я про
Цитата Сообщение от Toshkarik Посмотреть сообщение
и в нем записаны имена файлов и относительные пути
Да и наверное хранить их лучше структурой.
0
Toshkarik
1148 / 865 / 51
Регистрация: 03.08.2011
Сообщений: 2,404
Завершенные тесты: 1
09.02.2013, 23:59 #24
Avazart, про это и идет речь. Конечно удобней использовать классы. Но нельзя заранее знать размер имени, или пути, поэтому нельзя просто взять и сразу записать данные в объект структуры. Вообще, в таких случая, как я считаю, нужно считывать весь заголовок в буфер ( или полностью файл, если он небольшой ), и из него уже брать то, что нужно. Нет смысла считывать все по очереди, особенно если файл небольшой.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
10.02.2013, 01:24 #25
Цитата Сообщение от Toshkarik Посмотреть сообщение
Avazart, про это и идет речь. Конечно удобней использовать классы.
Вообще то я имел ввиду именно структуры
Цитата Сообщение от Toshkarik Посмотреть сообщение
Но нельзя заранее знать размер имени, или пути, поэтому нельзя просто взять и сразу записать данные в объект структуры.
Это по чему же ? Пути в системы все таки имеют свои ограничения, поэтому тут вполне предсказуемо, а размер файла вполне можно определять в заголовке.

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

Добавлено через 45 секунд
Цитата Сообщение от Toshkarik Посмотреть сообщение
буфер ( или полностью файл, если он небольшой ), и из него уже брать то,
А как иначе со структурой ?

Добавлено через 2 минуты
Вообще я бы советовал применить ini-файл если TC сохраняет настройки программы, к тому же для этого в Builder есть класс TIniFile
0
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 01:50  [ТС] #26
как решить проблему. есть структура(класс). один из элементов структуры динамический, то есть размер структуры заранее неизвестен. как записать:
C++
1
2
3
4
struct G{
AnsiString Name;// само самой сложный объект и т.п., просто чтоб было понятно.
int Level;
};
я думаю что как то можно, интерес основной высокая степень инкапсуляции то есть чтоб записывалось
как то так, но необязательно так надеюсь мой бред поняли:
C++
1
2
G G_str;
File.write((char*)&G_str,sizeof(struct G));
Добавлено через 1 минуту
ну и читалось как то адекватно.
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
10.02.2013, 01:50 #27
Цитата Сообщение от evil0o Посмотреть сообщение
то есть размер структуры заранее неизвестен.
Ну так так что размер совсем не ограничен что-ли? Бери по максимуму... и используй char* в структуре
0
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 01:56  [ТС] #28
интересует экономия места. например одна структура весит 15 мегабайт другая 20 байт, и писать каждую по 15 мб. как то не круто
0
Avazart
Эксперт С++
7586 / 5571 / 330
Регистрация: 10.12.2010
Сообщений: 24,997
Записей в блоге: 17
10.02.2013, 01:59 #29
Цитата Сообщение от evil0o Посмотреть сообщение
интересует экономия места. например одна структура весит 15 мегабайт другая 20 байт, и писать каждую по 15 мб. как то не круто
Не круто делать то что не понимаешь...

Что вообще надо ?

Экономия - используйте текстовый файл.
Быстрый и произвольный доступ - бинарный
0
evil0o
5 / 5 / 0
Регистрация: 04.07.2010
Сообщений: 200
10.02.2013, 02:10  [ТС] #30
Цитата Сообщение от Avazart Посмотреть сообщение
Не круто делать то что не понимаешь...
это да, но надо для саморазвития как минимум. А вообще это реально, но лезет жесткий изврат с классами. не хочется самому выдумывать велосипед(и скорее всего с квадратными колесами), лучше подскажите или пример скинте.
0
10.02.2013, 02:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.02.2013, 02:10
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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