Obsługa plików w C++ – zapis danych
Obsługa plików przez programy komputerowe daje bardzo dużo możliwości. To właśnie w plikach możemy między innymi zapisać potrzebne dane wprowadzone przez użytkownika na przykład jakieś ustawienia lub inne informacje, których wprowadzanie co chwilę utrudniało by lub całkowicie umożliwiało sprawną obsługę dane aplikacji. Przyjrzyjmy się więc technikom zapisu danych do plików w języku C++.
Na początku musimy oczywiście dołączyć odpowiednią bibliotekę (fstream
):
#include <fstream> //import biblioteki fstream
Teraz możemy zabrać się za pisanie kodu odpowiedzialnego za zapis naszych danych.
Utwórzmy więc obiekt typu fstream
na bazie którego będziemy wykonywać dalsze operacje:
fstream naszPlik;
Teraz możemy na przykład otworzyć plik do którego chcemy coś zapisać. Wykonuje się to tak:
fstream naszPlik; naszPlik.open("nazwaNaszegoPliku.txt", ios:app); //otwórz plik nazwaNaszegoPliku.txt, ustaw wskaźnik na końcu i tam dopisuj dane
Metoda open
obiektu fstream
zaprezentowana wyżej przyjmuje dwa argumenty, nazwę pliku wraz z rozszerzeniem oraz informację o trybie w jakim dany plik chcemy otworzyć. Przy trybie otwarcia pliku w zależności od potrzeb możemy zastosować kilka poleceń (razem oddzielonych znakiem | lub osobno jak w przykładzie wyżej):
ios::app | Otwiera plik tylko do zapisu, ustawia wskaźnik na jego końcu i tam zapisuje dane. |
ios::ate | Ustawianie wskaźnika na koniec pliku. |
ios::binary | Otwarcie pliku w trybie binarnym, tzn. dane traktowane są jak binarne, a nie tekstowe. |
ios::in | Otwarcie pliku w trybie do odczytu. |
ios::out | Otwarcie pliku w trybie do zapisu. |
ios::trunc | Podczas otwierania plik jest czyszczony (tzn. usuwana jest jego zawartość). |
Po otwarciu pliku przyszła pora na zapisanie do niego jakiś danych. Przyjrzyjmy się więc pierwszej metodzie, która to umożliwia.
Zapis danych za pomocą strumienia
Zapisywanie danych za pomocą strumienia jest naprawdę banalne. Wszystko działa tak samo jak przy wypisywaniu informacji na ekranie tyle, że zamiast okna konsoli mamy tutaj plik:
naszPlik << zmiennaZjakasDana; //oczywiście naszPlik to obiekt typu fstream
Zapis danych za pomocą metody write
Kolejną możliwością zapisania danych jest użycie metody write
obiektu fstream
. Odbywa się to w następujący sposób:
string jakiesDane = "zapisz to do pliku"; naszPlik.write(&jakiesDane[0], jakiesDane.length()); //zapisujemy jakieś dane zaczynając od indeksu 0 i kończąc przy ostatnim indeksie
Oczywiście dostępu do pliku nie uzyskamy kiedy taki plik na przykład nie istnieje lub nie mamy praw zapisu.
Zamykanie pliku
Na koniec pozostało nam zamknięcie pliku, co robi się tak:
naszPlik.close();
W pełni działający program:
#include <iostream> #include <fstream> using namespace std; int main() { fstream naszPlik; naszPlik.open("nazwaPliku.txt", ios::out); string d = "111"; naszPlik << d; naszPlik.write(&d[0], d.length()); naszPlik.close(); return 0; }
Fot: toolmantim, Flickr | CC.