С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 1
Регистрация: 23.10.2015
Сообщений: 18
1

Структура не записывается в файл

01.10.2016, 08:35. Показов 1470. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Всем привет. Пытаюсь, значит, организовать работу с файлом в C++. Надо записать в smallfile.dat небольшую структуру, содержащую в себе поля "имя", "адрес", "возраст". По информации, полученной по разным ссылкам, я написал код. Единственный плюс моей "программы" - она не вылетает. Консоль запускается, просит ввести данные, файл создается, но после того, как данные ввелись и консоль закрылась, файл пуст и весит 0 байт, хотя, по идее, в него должна записаться структура.
C++ (Qt)
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
// console.cpp: главный файл проекта.
 
#include "stdafx.h"
#include <fstream>
#include <iostream>
#include <iomanip>
//#include <string>
using namespace System;
using namespace std;
 
struct small_data_table {
    char name[20];
    int age;
    char adress[10];
};
 
void main()
{
    //setlocate(LC_ALL,"Russian");
 
    //char namefile[10];
    cout << "CONSOLE \n";
    //cin >> namefile;
    //cout << "file name: \n" << namefile << "\n" << endl;
    ofstream f("smallfile.dat");
    //f.open(namefile, app);
    //cout << endl;
    small_data_table a;
    f.open("smallfile.dat", ios_base::in | ios_base::ate | ios_base::app | ios_base::binary);
    cout << "vvedite: name, adress, age \n";
    cin >> a.name >> a.adress >> a.age;
    f.write((char*)&a, sizeof(a));
    f.close();
}
Я немного сомневаюсь в вот этом месте.
C++ (Qt)
1
f.write((char*)&a, sizeof(a));
Я прочитал, что на месте первого параметра, передаваемого в процедуру, надо ставить (char*)&переменная_записывающаяся_в_файл. Но смысла в этом я так и не понял. Что это? Преобразование данных в тип char? Но зачем, если в dat-файлах можно хранить как-раз таки типизированную информацию, т.е. числовые массивы, например, или массивы структур/объектов? Может, ошибка в этой строчке?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
01.10.2016, 08:35
Ответы с готовыми решениями:

Неправильно записывается структура в файл
помогите с ошыбкой, структуру у файл неправильно записывает, в файле всевремя какието маты типа:...

При записи в файл, в какую папку записывается файл?
При записи текста в файл в какой папке создается файл и туда записываются данные, записываю так:...

Не записывается в файл
Помогите отладить чтобы всё работало. в модуле заданы функции задаём интервалы a и b(границы по...

Не записывается в файл
static string myTxt = @&quot;C:\ForCourseWork\myTxt.txt&quot;; static FileStream FS = new FileStream(myTxt,...

3
7803 / 6567 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.10.2016, 08:54 2
Открываешь неправильно. Одной строкой:
C++
1
ofstream f("smallfile.dat", ios_base::binary);
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
01.10.2016, 08:58 3
Цитата Сообщение от негритос Посмотреть сообщение
ofstream f("smallfile.dat");
Вот так сделай:
C++
1
ofstream f("smallfile.dat", ios::::binary);
А это убери:
Цитата Сообщение от негритос Посмотреть сообщение
f.open("smallfile.dat", ios_base::in | ios_base::ate | ios_base::app | ios_base::binary);
Добавлено через 2 минуты
Цитата Сообщение от негритос Посмотреть сообщение
Но смысла в этом я так и не понял. Что это? Преобразование данных в тип char? Но зачем, если в dat-файлах можно хранить как-раз таки типизированную информацию, т.е. числовые массивы, например, или массивы структур/объектов?
Бинарные методы работают с байтами (они же char), поэтому нужно указывать адрес, где эти char находятся (он же указатель на char). Второй параметр указывает сколько этих байт (char) нужно записать (или прочитать).
1
0 / 0 / 1
Регистрация: 23.10.2015
Сообщений: 18
01.10.2016, 11:19  [ТС] 4
nd2, nmcf, спасибо за помощь! Все помогло. Необязательно писать f.open, можно сразу "проинициализировать", когда объявляем объект класса ofstream. Теперь все добавляет. Спасибо!
0
01.10.2016, 11:19
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
01.10.2016, 11:19
Помогаю со студенческими работами здесь

Не записывается файл
Данные отправляются на сервер, но в файл не записываются &lt;!doctype html&gt; &lt;html&gt; &lt;script&gt; ...

Не записывается строка в файл
Не записывается строка в файл в чем может быть причина ? fstream f(&quot;work_mem.txt&quot;, ios::in |...

Не записывается объект в файл
Здравствуйте! У меня имеются клаcсы: type ClassA = class private ...

Не записывается информация в файл
Задание таково: #include&lt;stdio.h&gt; #include&lt;stdlib.h&gt; #include&lt;stdio.h&gt; #include&lt;string.h&gt;...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru