Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
13 / 13 / 5
Регистрация: 13.06.2015
Сообщений: 60
1

Чтение и запись из одного файла

23.07.2015, 21:54. Показов 720. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
все вроде норм но почему после вывода получаю краш , извините есле что не так только начал читать про файлы

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
class person // класс person
{
protected:
    string name;
    string town;
    string proffesion;
    float how_get_money;
    short age; 
public:
    person() :name("n/b"), town("n/b"), proffesion("n/b"), how_get_money(0.0), age(0)
    {}
    void setdata() // получить данные о человеке
    {
        cout << "\nEnter name          : "; 
        cin >> name;
        cout << "\nEnter age           : "; 
        cin >> age;
        cout << "\nEnter native town   :";
        cin >> town;
        cout << "\nEnter proffesion    :";
        cin >> proffesion;
        cout << "\nEnter how get money : ";
        cin >> how_get_money;
    }
    void showData()const
    {
        cout << "\nName          : "<< name
             << "\nAge           : "<< age
             << "\nNative town   : "<< town
             << "\nProffesion    : "<< proffesion
             << "\nHow get money : "<< how_get_money;
    }
};
 
void addNewPeopl(person p);
void getAllPeopl(person p);
void thoroughOnePeopl(person p);
int main()
{
    setlocale(LC_ALL, "rus");
 
    person persone_one;
    char choise = '\x0' ;
 
    cout << "\nWhat you want do ?"
        << "\n a - add new  data "
        << "\n g - get all  data "
        << "\n t - thorough data \n -> ";
    cin >> choise;
        switch (choise)
        {
        case 'a':
            addNewPeopl(persone_one);
            break;
        case 'g':
            getAllPeopl(persone_one);
            break;
        case 't':
            thoroughOnePeopl(persone_one);
            break;
        }
    
    cout << "\n\n\n\n";
    return 0;
}
 
void addNewPeopl(person p)
{
    char what_to_do = '\x0';
    fstream setFile;
    setFile.open("files.DAT", ios::app | ios::out | ios::binary);   
    do
    {
        p.setdata();
        setFile.write(reinterpret_cast<char*>(&p), sizeof(p));
        cout << "\nYet one times ? y-n -> ";
        cin >> what_to_do;
 
    } while (what_to_do != 'n');
    setFile.close();
}
void getAllPeopl(person p)
{
    fstream setFile;
    setFile.open("files.DAT", ios::in | ios::binary);
    setFile.seekg(0);
    setFile.read(reinterpret_cast<char*>(&p), sizeof(p));
    while (!setFile.eof())
    {
        p.showData();
        setFile.read(reinterpret_cast<char*>(&p), sizeof(p));       
        cout << "\n";
    }
    setFile.close();
}
void thoroughOnePeopl(person p)
{
    fstream setFile;
    setFile.open("files.DAT", ios::in | ios::binary);
 
    // установить указатель на 0 байт от конца файла
    setFile.seekg(0, ios::end);   
 
    int endposition = setFile.tellg();  // найти позицию
    int n = endposition / sizeof(person);  // число человек
 
    cout << "\nВ файле " << n << " человек(а)";
    cout << "\nВведите номер персоны: ";
    cin >> n;
 
    int position = (n - 1) * sizeof(person); // умножить размер данных под персону на число персон
    setFile.seekg(position);   // число байт от начала прочитать одну персону
 
    setFile.read(reinterpret_cast<char*>(&p), sizeof(p));
    p.showData();
    setFile.close();
}
Добавлено через 2 минуты
есле изменить мейн

C++ Скопировано
1
2
3
4
5
6
7
8
9
10
11
12
13
14
int main()
{
    setlocale(LC_ALL, "rus");
 
    person persone_one;
 
    
        addNewPeopl(persone_one);
            getAllPeopl(persone_one);
            thoroughOnePeopl(persone_one);
 
    cout << "\n\n\n\n";
    return 0;
}
то все нормально (((
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.07.2015, 21:54
Ответы с готовыми решениями:

Запись и чтение одного и того же файла
Помогите разобраться в вопросе: написал прогу которая должна была создать текстовый файл, записать в него строку, открыть этот файл для...

Чтение из одного файла и запись в другой файл winAPI c++
Всем привет уже битый час туплю. Короче нужно переписать всю информацию из одного файла в другой(не копировать файл) и вопрос в том как это...

Чтение N-ной строки из одного файла и её запись в другой файл
Добрый день/вечер Столкнулся с такой проблемой: Требуется прочитать определенную строку в файле(HHH.txt) и записать эту строку в...

6
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,169
Записей в блоге: 10
23.07.2015, 22:07 2
Цитата Сообщение от Maksumko Посмотреть сообщение
но почему после вывода получаю краш
Какого вывода?
0
13 / 13 / 5
Регистрация: 13.06.2015
Сообщений: 60
23.07.2015, 23:08  [ТС] 3
например есле выбираю вариант "a" то нормально додаю нового человека , а есле вывод всех или конкретного то выводит и потом краш программы .
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
24.07.2015, 00:40 4
Объекты класса с такими полями (string) не годятся для бинарного чтения/записи.
1
 Аватар для Krasiosoft
52 / 52 / 23
Регистрация: 01.06.2015
Сообщений: 189
24.07.2015, 03:07 5
Maksumko, при вашем варианте записи в файл:
C++ Скопировано
1
setFile.write(reinterpret_cast<char*>(&p), sizeof(p));
В файл записывается содержимое класса string, а т.к. этот класс выделяет память динамически, то в файл попадают указатели на эту память, но не ее содержимое, в этом и есть проблема.
1
13 / 13 / 5
Регистрация: 13.06.2015
Сообщений: 60
24.07.2015, 08:51  [ТС] 6
а как сделать чтоб принимало содержимое класса string и попадало содержимое а не указатели ?
0
lss
941 / 869 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
24.07.2015, 13:56 7
Цитата Сообщение от Maksumko Посмотреть сообщение
а как сделать чтоб принимало содержимое класса string и попадало содержимое а не указатели ?
Использовать текстовые методы чтения/записи.

Добавлено через 5 минут
Запись и чтение структуры с файла
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2015, 13:56
Помогаю со студенческими работами здесь

Чтение и парсинг одного файла, запись данных во второй. Исправить код
Задание. Есть текстовый файл, он имеет структуру: Имя1 время1 время2. То есть примерно в файле это выглядит так: Файл1 23:34 23:35 ...

Запись текста в файл, чтение текста из файла, перепись текста из одного файла в другой файл
Составить программу, в которой организованы следующие действия: запись текста в файл, чтение текста из файла, перепись текста из...

Чтение данных с одного txt файла, запись данных во второй txt в определенную позицию
Добрый день, уважаемые форумчане! Нужна ваша помощь. Задача поставлена так: существует файл film2.txt (постараюсь его прикрепить для...

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

Потоки и запись/чтение в/из одного массива
Имеется массив данных (каких - неважно, пусть double). Один поток пишет данные. Остальные (один или более) читают. Как...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Циклы for в Python
py-thonny 17.03.2025
Существует множество ситуаций, когда нам нужно выполнить одно и то же действие несколько раз. Цикл for в Python — настоящий рабочий конь для большинства программистов. Если вам нужно пройтись по всем. . .
Предсказание ветвлений - путь к высокопроизводи­тельному C++
NullReferenced 17.03.2025
В высокопроизводительном программировании на C++ каждый такт процессора на счету. Когда речь заходит о разработке систем с низкой задержкой — будь то высокочастотная торговля, обработка потоковых. . .
Паттерн CQRS в C#
UnmanagedCoder 17.03.2025
Создание сложных корпоративных приложений часто требует нестандартных подходов к архитектуре. Один из таких подходов — паттерн CQRS (Command Query Responsibility Segregation), предлагающий простую,. . .
Паттерн Цепочка ответственности в C#
UnmanagedCoder 17.03.2025
Цепочка ответственности — это поведенческий паттерн проектирования, который позволяет передавать запросы последовательно по цепочке потенциальных обработчиков, пока один из них не обработает запрос. . . .
Создаем микросервисы с NestJS, TCP и Typescript
run.dev 17.03.2025
NestJS — фреймворк, который значительно упрощает создание серверных приложений на Node. js. Его прелесть в том, что он комбинирует концепции ООП, функционального программирования и предлагает. . .
Гексагональная архитектура со Spring Boot
Javaican 17.03.2025
Если вы когда-нибудь сталкивались с ситуацией, когда внесение простых изменений в базу данных или пользовательский интерфейс заставляло вас переписывать весь код, то вы точно оцените элегантность. . .
Позиционировани­е Kafka Consumer и Seek-операции
Javaican 17.03.2025
Что же такое Consumer Seek в Kafka? По сути, это API-метод, который позволяет программно указать, с какой позиции (offset) Consumer должен начать или продолжить чтение данных из партиции. Без этого. . .
Python NumPy: Лучшие практики и примеры
py-thonny 17.03.2025
NumPy (Numerical Python) — одна из ключевых библиотек для научных вычислений в Python. Она превращает Python из просто удобного языка общего назначения в среду для проведения сложных математических. . .
Java Micronaut в Docker: контейнеризация с Maven и Jib
Javaican 16.03.2025
Когда речь заходит о микросервисной архитектуре на Java, фреймворк Micronaut выделяется среди конкурентов. Он создан с учётом особенностей облачных сред и контейнеров, что делает его идеальным. . .
Управление зависимостями в Java: Сравнение Spring, Guice и Dagger 2
Javaican 16.03.2025
Инъекция зависимостей (Dependency Injection, DI) — один из фундаментальных паттернов проектирования, который радикально меняет подход к созданию гибких и тестируемых Java-приложений. Суть этого. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru
Выделить код Копировать код Сохранить код Нормальный размер Увеличенный размер