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

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

Войти
Регистрация
Восстановить пароль
 
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
#1

Запись структур в файл - C++

12.03.2010, 01:49. Просмотров 977. Ответов 8
Метки нет (Все метки)

У меня есть файл и масив структур. Надо реализовать запись и чтения файла. Можна ли сделать так: запускаю первый раз програму, ввожу дание в файл, потом, при последующих запусках чтобы масив розширался, в зависимости от количества структур, что я ввел???

Добавлено через 1 час 12 минут
Есть у кого мысли???
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2010, 01:49
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Запись структур в файл (C++):

Запись структур в файл - C++
можно ли сделать так что бы структуру base, которую нужно записать несколько раз в файл а потом считать, без константы MAX и без ее...

Запись структур в файл - C++
Доброго всем времени суток.:dance: Обращаюсь к вам с таким вопросом : Взяв за основу Задача 2 Лабораторной работы изменить код...

Запись структур в файл - C++
Здравствуйте! Имеется структура struct user { char login; char password; }; Записываю несколько таких в файл

Запись классов, структур в файл - C++
Подскажите как правильно, записывать и читать данные с файла, особенно если записываются данные разных типов) Работает но как то не...

запись массива структур в файл - C++
Запись массива структур в файл так, что бы потом можно было считывать, удалять ненужные записи, добавлять, сортировать, поиск. Я пробовал...

Запись в файл структур(с указателем) - C++
Добрый день, подскажите, как корректно записать и прочитать в файл структуру, если она содержит указатель на другую струкруту? struct two...

8
Sergey_O
5 / 5 / 1
Регистрация: 09.12.2009
Сообщений: 65
12.03.2010, 06:45 #2
Ну первым делом создаешь функцию чтения из файла, заполняешь массив.
Потом добавляешь или удаляешь элементы, вновь записываешь в файл. И так сколько угодно.

Если неправильно тебя понял, переформулируй вопрос.
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
12.03.2010, 08:56  [ТС] #3
Как сделеть, чтоб при выполнении програми можна было менять размер масива.
Сначала открываю файл, нахожу сколько у меня елементов масива структур, потом в конце добазаписиваю в файл еще один елемент масива, и так далее. Я точно незнаю, но может ето понятие динамического масива???
0
Iworb
анимешник++
93 / 60 / 2
Регистрация: 03.11.2009
Сообщений: 413
12.03.2010, 09:41 #4
Цитата Сообщение от MILAN Посмотреть сообщение
Как сделеть, чтоб при выполнении програми можна было менять размер масива.
Сначала открываю файл, нахожу сколько у меня елементов масива структур, потом в конце добазаписиваю в файл еще один елемент масива, и так далее. Я точно незнаю, но может ето понятие динамического масива???
немного понял, но наверно такое сделать нельзя. Есть один способ, но не знаю, прокатит ли.
Ты заранее динамически задаешь массив бОльшей размерности. Записываешь те значения в массив, как при нормальном размере, а потом дописываешь новые значения, которые идут после конца исходного массива, но до конца заданного

Например в файле есть
0 5 1 2
размер - 4
ты задал размер 6
считал 0 5 1 2 * *
там где * - можешь ставить свои значения
0
kuroiryuu
316 / 300 / 23
Регистрация: 05.11.2009
Сообщений: 712
Завершенные тесты: 2
12.03.2010, 12:00 #5
лучше всего в данном случаи работать напрямую с файлом и в памяти хранить только одну структура, а не массив...
так вы себя не ограничиваете объемом памяти, и мучаетесь с динамическими массивами, но для добавления данных в файл или удаления вам придётся самому написать функцию, которая добавляет или удаляет вашу запись из файла. Редактирование в этом случаи делается просто заменой старой информации на новую.
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
12.03.2010, 16:02 #6
Цитата Сообщение от MILAN Посмотреть сообщение
Как сделеть, чтоб при выполнении програми можна было менять размер масива.
Сначала открываю файл, нахожу сколько у меня елементов масива структур, потом в конце добазаписиваю в файл еще один елемент масива, и так далее. Я точно незнаю, но может ето понятие динамического масива???
Тому есть масса решений. Два на вскидку:
А)
1. открыть файл для чтения / fopen(name, "rb"); /
2. получить его размер, разделить на размер структуры - получится количество структур в файле
3. создать динамический массив на столько структур
4. прочитать их все из файла в массив, закрыть файл.
5. для добавления нового элемента изменить размер массива / realloc() /
6. открыть файл для добавления / fopen(name, "ab") /
7. дописать в файл новые структуры, закрыть файл

Б)
1 - 5 то же самое
6 открыть файл для записи / fopen(name, "wb") /
7 записать весь массив, закрыть файл

мало того! ещё есть вариант - сделать одно(двух) связный список, где в качестве данных как раз объекты структуры храниться будут...
Это, если на С. А на С++ лучше активно использовать контейнеры STL.
0
MILAN
885 / 779 / 86
Регистрация: 21.02.2009
Сообщений: 1,722
13.03.2010, 16:26  [ТС] #7
Приведите пример програмки, пожалуста!!!

Добавлено через 1 час 55 минут
Очень надо!!!

Добавлено через 2 часа 21 минуту
easybudda, помогите пожалуста!!!!

Добавлено через 19 часов 19 минут
Ни у кого нету мислей???
0
fasked
Эксперт С++
4942 / 2522 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
13.03.2010, 17:25 #8
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
 
typedef struct Point
{
    int x, y;
}   POINT, * PPOINT;
 
int main () 
{
    string filename = "in.txt";
    ifstream ifs(filename.c_str(), ifstream::in);
 
    vector<POINT> v;
    POINT p;
    
    // Чтение
    while(ifs)
    {
        ifs >> p.x;
        ifs >> p.y;
        
        v.push_back(p);
    }
    
    for(int i = 1; i < v.size(); ++i)
        cout << v[i].x  << ' ' << v[i].y << endl;
    
    ifs.close();
    
    // Ввод
    int am = 0;
    cout << "Amount structs to enter: ";
    cin >> am;
    
    while(am--)
    {
        cout << "Enter the X: ";
        cin >> p.x;
        
        cout << "Enter the Y: ";
        cin >> p.y;
        
        v.push_back(p);
    }
    
    // Запись в файл
    ofstream ofs(filename.c_str(), fstream::out);
 
    for(int i = 1; i < v.size(); ++i)
        ofs << v[i].x << ' ' << v[i].y << endl;
        
    ofs.close();
}
Добавлено через 22 минуты
Содержимое in.txt
Код
8 0
8 0
1 2
0
easybudda
Модератор
Эксперт CЭксперт С++
9664 / 5614 / 952
Регистрация: 25.07.2009
Сообщений: 10,778
13.03.2010, 18:43 #9
Цитата Сообщение от MILAN Посмотреть сообщение
Ни у кого нету мислей???
Мыслей полная голова! Вот времени не хватает... Тут посмотрите - не совсем то, но как пример, сгодится...
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2010, 18:43
Привет! Вот еще темы с ответами:

Запись массива структур в бинарный файл - C++
Есть структура Owner: struct Owner{ char name; unsigned int purse; short catb; void addcat(short num); }; ...

Запись массива структур в бинарный файл - C++
Одно из полей структуры типа String, нужно записать массив структур в бинарный файл: struct NOTEBOOK { string model; // наименование ...

Запись в файл некоторого количества структур - C++
Надо записать в файл некоторое количество записей, не используя массивов. Знаю что надо через write(), но вот как правильно передать...

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


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

Или воспользуйтесь поиском по форуму:
9
Yandex
Объявления
13.03.2010, 18:43
Ответ Создать тему
Опции темы

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