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

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

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

Студворк — интернет-сервис помощи студентам
Всем привет. Пытаюсь, значит, организовать работу с файлом в 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
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
01.10.2016, 08:35
Ответы с готовыми решениями:

Неправильно записывается структура в файл
помогите с ошыбкой, структуру у файл неправильно записывает, в файле всевремя какието маты типа: TGG ЂCк#include &lt;stdio.h&gt; ...

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

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

3
7804 / 6568 / 2988
Регистрация: 14.04.2014
Сообщений: 28,705
01.10.2016, 08:54
Открываешь неправильно. Одной строкой:
C++
1
ofstream f("smallfile.dat", ios_base::binary);
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
01.10.2016, 08:58
Цитата Сообщение от негритос Посмотреть сообщение
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  [ТС]
nd2, nmcf, спасибо за помощь! Все помогло. Необязательно писать f.open, можно сразу "проинициализировать", когда объявляем объект класса ofstream. Теперь все добавляет. Спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2016, 11:19
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru