Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636

В файле строки это объекты класса записанные в бинарном виде, как их всех считать?

23.09.2020, 11:33. Показов 2271. Ответов 40
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте
Таким образом записываю в файл каждый объект:
C++
1
2
3
4
5
6
7
8
9
10
11
12
vector<BookRecord> conts; // BookRecord - класс книжной записи
....
void Phonebook::write_to_file(const string& file)
{
    fstream rewrite(file, ios::out);
    rewrite.close();
 
    for (size_t i =0 ; i < conts.size(); i++)
    {
        conts[i].write_to_file(file); // из-за того что в цикле + внутри метода BookrRecord.write_to_fle() открытие файла происходит таким образом fstream f(f_name, ios::out | ios::binary | ios::app); каждая запись в файле с новой строки
    }
}
Вот так я считываю одну первую строку
C++
1
2
3
4
5
void Phonebook::read_from_file(const string& file)
{
    BookRecord buff;
    conts.push_back(buff.Read_from_file(file));  
}
Не могу придумать каким циклом считать весь файл, ну или вообще как это сделать в моем случае?
Помогите, пожалуйста
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.09.2020, 11:33
Ответы с готовыми решениями:

Как считать файл в бинарном виде?
как считать абсолютно любой файл в бинарном виде (в виде двоичного кода) и записать эти данные, например в файл

Как считать в бинарном виде файл из локальной сети
Дело в том, что ADODB.Stream может загружать файлы только с локальных дисков, причём с ASPSmartUpload таже история. Не знает ли...

Как записать объект(или хотя бы его поля ) в файл в бинарном виде и считать оттуда?
В txt файлик коллекцию обьектов записать необходимо, и считать потом оттуда.

40
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.09.2020, 13:58
Студворк — интернет-сервис помощи студентам
bars268, это не поможет
писать объекты в файл прямо с памяти = фейл.

Для такого результата создаются интерфейсы Сериалайзеры, Принуждающие наследованные классы раелизовать вывод (по крайней мере).
C++
1
2
3
4
class Serializeble {virtual size_t write(void * data)=0; };
clss MyStr : public Serializeble;
{
}
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:04
Цитата Сообщение от SmallEvil Посмотреть сообщение
писать объекты в файл прямо с памяти
в коде не объекты пишутся, как я понимаю, инты да массивы char
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
23.09.2020, 14:07  [ТС]
Цитата Сообщение от bars268 Посмотреть сообщение
скинуть архивчик с кодом что есть сейчас?
Держите, правда по сути мои последние изменения были в посте(

Цитата Сообщение от SmallEvil Посмотреть сообщение
стариковский подход
Я с радостью выслушаю "не стариковский подход"
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:09
Цитата Сообщение от Vlast001 Посмотреть сообщение
Держите
Ничего нет
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
23.09.2020, 14:11  [ТС]
Цитата Сообщение от bars268 Посмотреть сообщение
Ничего нет
Не знаю куда делся, наверно забыл нажать "Загрузить", извините
Вложения
Тип файла: rar Phonebook.rar (2.9 Кб, 2 просмотров)
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
23.09.2020, 14:15  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
интерфейсы Сериалайзеры
Вы говорите, о том чего я не никогда не слышал)))
И я только что почитал об этом, мне придется тогда переписывать вообще все, лучше это оставлю для следующего раза и попробую изначально делать таким образом, но сейчас не до сериалайзера
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.09.2020, 14:27
Цитата Сообщение от Vlast001 Посмотреть сообщение
не до сериалайзера
тогда простые функции методы read write

Добавлено через 52 секунды
Цитата Сообщение от Vlast001 Посмотреть сообщение
мне придется тогда переписывать вообще все
вся суть этих интрфейсов что ничего не переписываетмя
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:28
C++
1
void BookRecord::write(ostream& os)
Внимание на последнюю запись в файл. там len2 вместо len3
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.09.2020, 14:30
Vlast001,
в скинутом вами архиве ошибок больше чем в слове пиво которое изначально было вода
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:32
Цитата Сообщение от SmallEvil Посмотреть сообщение
в скинутом вами архиве ошибок больше чем в слове пиво которое изначально было вода
Да ладно вам накидывать, все такими были. Хотите накинуть с пользой - делайте ревью, а так абстрактно незачем критиковать
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.09.2020, 14:39
bars268, до сих пор есть проблема ?
опишите, решу
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:40
SmallEvil, проблема ТС была в копипасте =)
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
23.09.2020, 14:49  [ТС]
Цитата Сообщение от bars268 Посмотреть сообщение
нимание на последнюю запись в файл. там len2 вместо len3
Я походу совсем не внимателен или не туда смотрю, где вы нашли, что len2 не там где нужно?

Добавлено через 1 минуту
Цитата Сообщение от Vlast001 Посмотреть сообщение
что len2 не там где нужно
Правда, совсем не внимателен, нашел, спасибо!
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:50
BookRecord.cpp строка 26

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
void BookRecord::write(ostream& os)
{
    os.write((char*)&id, sizeof(id));
 
    string::size_type len = name.length();
    string::size_type len1 = phone.length();
    string::size_type len2 = adress.length();
    string::size_type len3 = surname.length();
 
 
    os.write((char*)&len, sizeof len);
    os.write((char*)&len1, sizeof len1);
    os.write((char*)&len2, sizeof len2);
    os.write((char*)&len3, sizeof len3);
 
 
    if(len > 0)
        os.write((char*)name.c_str(), len);
    if (len1 > 0)
        os.write((char*)phone.c_str(), len1);
    if (len2 > 0)
        os.write((char*)adress.c_str(), len2);
    if (len3 > 0)
        os.write((char*)surname.c_str(), len2); // ВОТ ТУТ
 
}
1
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
23.09.2020, 14:53  [ТС]
Цитата Сообщение от bars268 Посмотреть сообщение
проблема ТС была в копипасте =)
Так, погодите, у меня все это было правильно, ошибка была лишь в копипасте, и в том, что мудрил с чтение и записью до создания темы на форуме?)) Блин, надо же, и такое бывает

SmallEvil, если у меня такой плохой код, пожалуйста расскажите, что не так и как улучшить? Не зачем мой код пивом из воды обзывать
0
27 / 21 / 9
Регистрация: 26.01.2013
Сообщений: 168
23.09.2020, 14:55
Цитата Сообщение от Vlast001 Посмотреть сообщение
у меня все это было правильно, ошибка была лишь в копипасте, и в том, что мудрил с чтение и записью до создания темы на форуме
Ну не совсем. В первом варианты вы бы дальше чтения первой записи не ушли бы никуда.
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.09.2020, 15:02
Цитата Сообщение от Vlast001 Посмотреть сообщение
SmallEvil, если у меня такой плохой код, пожалуйста расскажите, что не так и как улучшить? Не зачем мой код пивом из воды обзывать
ну это на долго, смысла в этом нету. если Вас все устраивает меня тем более )
0
31 / 15 / 7
Регистрация: 08.01.2019
Сообщений: 636
23.09.2020, 15:22  [ТС]
Цитата Сообщение от SmallEvil Посмотреть сообщение
ну это на долго, смысла в этом нету.
а зачем тогда было гнать на код без оснований и аргументов?
Я бы с радостью послушал, я еще много чего не знаю, если обзывать не будите


P.S. Вы случайно не из тех, кто любит std::, а не using namespace std независимо от ситуации?)
0
 Аватар для SmallEvil
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
23.09.2020, 15:40
Цитата Сообщение от Vlast001 Посмотреть сообщение
P.S. Вы случайно не из тех, кто любит std::, а не using namespace std независимо от ситуации?)
предпочтительно использовать только то что нужно.
а на счет кода,
может быть, для начинающего

Добавлено через 1 минуту
in.read((char*)&len1, sizeof(len1));
но вот это, конешно стремно

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
void BookRecord::set_id(int _id)
{
    id = _id;
}
 
const string& BookRecord::get_name() const
{
    return name;
}
 
void BookRecord::set_name(const string& _name)
{
    name = _name;
}
 
const string& BookRecord::get_phone() const
{
    return phone;
}
 
void BookRecord::set_phone(const string& _phone)
{
    phone = _phone;
}
 
const string& BookRecord::get_adress() const
{
    return adress;
}
 
void BookRecord::set_adress(const string& _adress)
{
    adress = _adress;
}
 
const string& BookRecord::get_surname() const
{
    return surname;
}
 
void BookRecord::set_surname(const string& _surname)
{
    surname = _surname;
}
если проверок не делается и контроля, делаем паблик доступ
0
Вездепух
Эксперт CЭксперт С++
 Аватар для TheCalligrapher
13235 / 6867 / 1827
Регистрация: 18.10.2014
Сообщений: 17,407
23.09.2020, 19:44
Цитата Сообщение от SmallEvil Посмотреть сообщение
писать объекты в файл прямо с памяти = фейл.
Интересно, а откуда же еще можно писать что-то в файл, как не из памяти?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.09.2020, 19:44

Как записать объект с полем типа std::string в бинарном виде в файл и считать его обратно?
Знаю как записывать объекты в файл в бинарном виде, но как быть, когда у них динамические поля? Какой метод использовать? Можете привести...

Использование в бинарном дереве объекты класса
Подскажите пожалуйста, как можно в бинарном дереве взаимодействовать с собственны классом set&lt;Studen&gt; baz = { Сдесь...

Сериализация - Записать все объекты хранящиеся в бинарном файле в List<>
Как записать все объекты хранящиеся в бинарном файле в List&lt;&gt;?

Замена строки в бинарном файле, как?
Если открыть файл через WinHex то видно текстовую строку, вот ее надо заменить на другую такой же длины. Нужно именно найти и заменить, а...

Как срендерить картинку в бинарном виде в тег img из строки html?
Что-то типа такого &lt;?php $filename = &quot;/path/to/your/file.jpg&quot;; $handle = fopen($filename, &quot;rb&quot;); $contents = fread($handle,...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Установка ChatGPT (Codex) на Windows без использования Microsoft Store
Fabien159 28.10.2026
Здравствуйте всем читающим! Опишу процесс установки ChatGPT (Codex) на Windows, если по каким-то причинам у вас не получается устанавить его через Microsoft Store. И так: 1. Скачиваем с. . .
Программное добавление префикса в нумерацию документов
Maks 27.10.2026
Реализация из решения ниже выполнена в самописной конфигурации на БСП (помощь начинающему коллеге). Задача: Программно добавить префикс в нумерацию документов. Решение: В модуле объекта. . .
После закрытия оутлука продолжает висеть процесс в диспетчере задач
Maks 27.10.2026
С недавнего времени в продакшене возникла проблема: при закрытии оутлука в диспетчере задач продолжал висеть процесс outlook. exe. Проблема возникла после установки MS Office 2021 LTSC на машинах, под. . .
Baragoz - DPS/HPS бот для WoW 3.3.5a, многоязычный
AmbA 26.10.2026
Хотите ещё ботов? У меня есть один! А я пока отдохну от него. https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=12062&stc=1&d=1793007952 Инструкция внутри. https:/ / youtu. be/ VpfFZSUDGnQ. . .
Особенности gif сгенерированных в Си
russiannick 21.10.2026
Рассмотрим генерацию gif файлов, которые в Си имеют свои особенности. Gif представляет собой графический формат популярный в интернете. Посмотрим на палитру. Gif файл сгенерированный в си отличается. . .
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru