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

Работа с файлами (запись/чтение данных из бд) - C++

Восстановить пароль Регистрация
 
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
19.02.2013, 22:48     Работа с файлами (запись/чтение данных из бд) #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
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
#include <conio.h>
#include <iostream.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
 
struct Element{
    int Number;//инфополе, значения из него будут передаваться в список
    char Author[100];
    char Name[100];
    tm year;
    int Pages;
    void Input();//функция ввода данных в структуру
    Element *Next;
};
class List//Класс Список
{
Element *Head;//Указатель на начало списка
public:
    List():Head(NULL){};//Конструктов по умолчанию (Head=NULL)
    ~List();//Деструктор
    void Add(Element &elementl);
    void Show();
};
void Element::Input()//функция заполнения данных
{
 cout<<endl; //Небольшой разрыв при каждом новом вводе
    cout<<"Number:  ";
    cin >> Number;
    cout<<"Author: ";
    cin >> Author;
    cout<<"Name:  ";
    cin >> Name;
    cout<<"year :";
    cin >> year.tm_year;
    cout<<"Pages :";
    cin >> Pages;
}
List::~List()//Деструктор вынесен за класс
{
    while(Head!=NULL)//Пока по адресу не пусто
    {
        Element *temp=Head->Next;//Временная переменная для хранения адреса следующего элемента
        delete Head;//Освобождаем адрес обозначающий начало
        Head=temp;//Меняем адрес на следующий
    }
} 
void List::Add(Element &elementl)
{
 
    Element *temp = new Element;
    memcpy(temp, &elementl, sizeof(Element));
    temp->Next=Head;
    Head=temp;//Указываем, что последний активный элеент это только то что введенный
}
void List::Show()//Функция отображения списка на экране
{
    Element *temp;
    temp=Head;//изначально он равен адресу начала списка
    while(temp!=NULL)//до тех пор пока не встретит пустое значение
    {
        cout<<endl;
    //Выводим все элементы структуры
         cout<<temp->Number<<" ";
         cout<<temp->Author<<" ";
         cout<<temp->Name<<" ";
         cout<<temp->year.tm_year<<" ";
         cout<<temp->Pages<<" ";
        temp=temp->Next;//Указываем, что далее нам нужен следующий элемент
    }
}
 
void main()
{
    Element elementl;
        int N;//Число элементов в список
        List lst;//Переменная тип которой список
    cout<<"N = ";cin>>N;//Указали сколько элементов вводить в список
    for (int i=0;i<N;i++)
    {
        elementl.Input();
        lst.Add(elementl);
    }
    cout << endl;
    lst.Show();//Вывод списка на экран
    
}
Прога создает и выводит базу данных, нужно приделать ей возможность записи/чтения файлов. Объясните пожалуйста, как это делается (чем пошаговей - тем лучше =))

Добавлено через 9 минут
...Ап...

Добавлено через 15 минут
...Ап...

Добавлено через 20 минут
...Up...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Iron Acorn
 Аватар для Iron Acorn
12 / 12 / 1
Регистрация: 28.09.2012
Сообщений: 39
19.02.2013, 22:58     Работа с файлами (запись/чтение данных из бд) #2
Используй fstream http://www.cplusplus.com/reference/fstream/fstream/

C++
1
2
3
4
5
int n = 0;
ifstream fi("input.txt");
ofstream fo("output.txt");
fi>>n;
fo<<n;
Hammer-On
0 / 0 / 0
Регистрация: 10.11.2012
Сообщений: 40
20.02.2013, 02:32  [ТС]     Работа с файлами (запись/чтение данных из бд) #3
спасибо, пробую

Добавлено через 2 часа 42 минуты
Ладно, вопрос 2, как взять готовую структуру и из памяти записать её в файл?

Добавлено через 49 минут
дело в том, что когда делаю в потоке, каждая структура затирает предыдущую.
и как вывести на экран содержимое файла тоже не въезжаю
C++
1
2
3
4
    fstream myFileReader("D:\\1010.txt", ios::in | ios::out);
    myFileReader.write((char*) &elementl, sizeof(elementl));
    myFileReader.read((char*) &elementl, sizeof(elementl));
cout << ... ;
Iron Acorn
 Аватар для Iron Acorn
12 / 12 / 1
Регистрация: 28.09.2012
Сообщений: 39
20.02.2013, 16:36     Работа с файлами (запись/чтение данных из бд) #4
Цитата Сообщение от Hammer-On Посмотреть сообщение
спасибо, пробую

Добавлено через 2 часа 42 минуты
Ладно, вопрос 2, как взять готовую структуру и из памяти записать её в файл?

Добавлено через 49 минут
дело в том, что когда делаю в потоке, каждая структура затирает предыдущую.
и как вывести на экран содержимое файла тоже не въезжаю
C++
1
2
3
4
    fstream myFileReader("D:\\1010.txt", ios::in | ios::out);
    myFileReader.write((char*) &elementl, sizeof(elementl));
    myFileReader.read((char*) &elementl, sizeof(elementl));
cout << ... ;
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
#include <iostream>
#include <fstream>
using namespace std;
 
struct user
{
    int id;
    char name[255];
};
 
int main()
{
   user a;
    a.id = 1;
    strcpy(a.name,"Mike");
    user b;
    b.id = 2;
    strcpy(b.name,"Alex");
    ofstream fo;
    ifstream fi;
    fo.open("output.dat",ios::ate);
    fo.write((char*) &a,sizeof(a));
    fo.write((char*) &b,sizeof(b));
    fo.close();
    user c;
    fi.open("output.dat",ios::in);
    while(fi.read((char*)&c,sizeof(c)))
    cout<<c.id<<" "<<c.name<<endl;
    fi.close();
    return 0;
}
Флаги режимов работы с файлом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
enum ios::open_mode
{
in = 0x01,******** // Открыть файл только для чтения
out =*** 0x02,******** // Открыть файл только для записи
ate =*** 0x04,******** // При открытии позиционироваться в конец файла 
app =*** 0x08,******** // Открыть существующий для дополнения
trunc =* 0x10,*** // Создание нового файла взамен существующего 
nocreate=0x20,**** // Не создавать новый файл при его отсутствии
noreplace=0x40,*** // Не создавать новый файл, если он существует
binary=* 0x80 // Двоичный файл ("прозрачный" ввод-вывод без
// преобразования символов конца строки)
};
Миниатюры
Работа с файлами (запись/чтение данных из бд)  
Yandex
Объявления
20.02.2013, 16:36     Работа с файлами (запись/чтение данных из бд)
Ответ Создать тему
Опции темы

Текущее время: 04:16. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru