Zapis danych do pliku

Wszystkie programy, które do tej pory tworzyliśmy opierały się tylko na wyświetlaniu danych na konsolę. Teraz nauczysz się jak wyniki swojej pracy zapisać do pliku tekstowego. W poniższych programach użyję rozszerzenia .txt, gdyż notatnik jako najprostszy edytor doskonale działa we współpracy z C++.

Do zapisu i odczytu danych z pliku potrzebna jest nowa biblioteka, którą dołączamy do naszego programu:

#include<fstream>

Przepisz poniższy program, który zapisuje proste zdanie do pliku. Poniżej omówię każde nowe polecenie.

32.cpp


1: #include<iostream>
2: #include<conio.h>
3: #include<fstream>
4:
5: using namespace std;
6:
7: int main()
8: {
9:      string strZdanie = "Uwielbiam programowac w C++";
10:
11:      ofstream plik ("plik1.txt");
12:      plik<<strZdanie<<endl;
13:      plik.close();
14:
15:      cout<<"Dane zostaly zapisane do pliku!!!";
16:
17: getch();
18: }


Wynik działania programu:

Dane zostały zapisane do pliku!!!

Funkcja ofstream otwiera lub tworzy nam plik. Po niej następuje zmienna plikowa, która odwołuje się do tego pliku. Następnie w nawiasie okrągłym wpisujemy nazwę pliku wraz z rozszerzeniem. Jeśli nie podamy ścieżki bezwzględnej, nasz program utworzy plik w miejscu gdzie znajduje się nasz plik cpp. Jeśli chcemy podać ścieżkę bezwzględną oto przykład:
ofstream plik („c:/dane/wyniki/plik.txt”);

Do dyspozycji C++ daje nam jeszcze polecenie fstream działające podobnie jak ofstream. Na razie do tworzenia plików będziemy wykorzystywać ofstream, a fstream omówię przy odczycie z pliku.

Następnie w linijce 12. strumień wyjścia nie został skierowany na konsolę, lecz do zmiennej plikowej. Właśnie w tym miejscu do naszego pliku trafiają dane z programu.

Linijka 13. zamyka nam zapis do pliku. Należy pamiętać o kończeniu zapisu do pliku – mamy wtedy pewność, że żadne niepowołanie dane nie trafią do naszego pliku.

Jeśli zapiszemy dane tą metodą do tego samego pliku po raz drugi, pierwsze znikną, gdyż zostaną nadpisane. Aby zobaczyć zasadę działania przepisz poniższy program i zapisz go w tym samym miejscu co poprzedni.

33.cpp


1: #include<iostream>
2: #include<conio.h>
3: #include<fstream>
4:
5: using namespace std;
6:
7: int main()
8: {
9:      string strZdanie = "Zniknelo twoje zdanie :( Tekst nadpisany";
10:
11:      ofstream plik ("plik1.txt");
12:      plik<<strZdanie<<endl;
13:      plik<<"Blad :("<<endl;
14:      plik<<528;
15:      plik.close();
16:
17:      cout<<"Dane zostaly zapisane do pliku!!!";
18:
19: getch();
20: }


W pliku pojawi się zdanie:

Zniknelo twoje zdanie :( Tekst nadpisany
Blad
528

Przy okazji linijki 14 i 15. pokazują, że dane do pliku możemy również wprowadzić nie stosując zmiennej.

Aby dopisać dane do pliku należy do funkcji ofstream dopisać …

ofstream plik („plik.txt”, ios::out | ios::app);

Poniżej kod programu dopisującego do pliku zdanie, które poda użytkownik.

34.cpp


1: #include<iostream>
2: #include<conio.h>
3: #include<fstream>
4: #include<widnows.h>
5:
6: using namespace std;
7:
8: int main()
9: {
10:      string strZdanie;
11:      cout<<"Podaj zdanie ... ";
12:      getline(cin, strZdanie);
13:
14:      ofstream plik ("plik2.txt", ios::out | ios::app);
15:      plik<<strZdanie<<endl;
16:      plik.close();
17:      cout<<endl;
18:
19:      cout<<"Dane zostaly zapisane do pliku!!!"<<endl<<endl;
20: getch();
21: }


Uruchom program kilka razy. Gdy otworzysz plik, zobaczysz w nim wszystkie wyrażenia, które podałeś na konsoli.

W C++ możemy stworzyć plik o nazwie podanej z klawiatury. Służy do tego biblioteka string i funkcja c_str(). Poniżej składnia:

#include<string.h>
...
ofstream plik ((nazwa_pliku + „.txt”).c_str(), ios::app | ios::out);

Zadania
33. Napisz program, który zapisze do pliku wynik dodawania trzech liczb podanych z klawiatury.
34. Napisz program, który dopisze do pliku kolejne znaki alfabetu zaczynając od dużego A, korzystając z kodu ASCI.
© Mateusz Ratajczak         www.commitcode.pl