Do tej pory w celu otworzenia pliku do odczytu lub zapisu wystarczyło zapisać:
Jednak można też otwierać plik w konkretnym trybie i wtedy prócz nazwy pliku podajemy dodatkowy argument, np.:
W ten sposób zostały zadeklarowane, że w otwieranym pliku plik.txt będą zapisywane dane. Wszystkie dostępne tryby przedstawia tabelka:
Tryb | Znaczenie |
---|---|
ios::in | Otwiera plik do zapisu |
ios::out | Otwiera plik do odczytu |
ios::binary | Otwiera plik w trybie binarnym |
ios::ate | Rozpoczyna przeglądanie pliku od ostatniego znaku |
ios::app | Wszystkie operacje zapisu są przeprowadzane na końcu pliku. Nie zmienia dotychczasowej zawartości pliku |
ios::trunc | Jeśli plik istniał to jego zawartość zostaje zastąpiona nową |
W przypadku, gdy chcemy użyć kilku trybów naraz to możemy użyć operatora binarnego OR (|):
fstream to klasa, która pozwala na odczytywanie lub zapisywanie danych z pliku. Dotychczas poznane klasy ostream i ifstream to podklasy fstream. W przypadku tych dwóch klas przypisywany jest odpowiednio domyślnie tryb ios::out i ios::in.
Spróbujmy uzyskać strumień odczytu przy pomocy fstream:
jest to równoważne z:
Funkcja | Znaczenie |
---|---|
open(name, mode) | Otwiera plik o podanej nazwie i w podanym trybie |
is_open() | Sprawdza czy strumień jest aktywny |
good() | Sprawdza czy nie ma błędów w odczycie |
eof() | Sprawdza czy odczyt się zakończył tj. osiągnął koniec pliku |
bad() | Sprawdza czy nie wystąpił błąd przy zapisie |
close() | Zamyka strumień odczytu / zapisu |
Dla skrótowców istnieje konstruktor, który pozwala otworzyć plik w konkretnym trybie. Ma on postać fstream [nazwa_zmiennej] ([nazwa_pliku], [tryb]). Przykładowo:
Oczywiście na koniec taki strumień należy zamknąć używając close().
Napisz aplikację, która:
Poniżej znajduje się wyjaśnienie jak napisać kod realizujący zadanie.
(2.) Deklaracja zmiennej i (3.) otwarcie strumienia do zapisu. Następnie (4. - 8.) w pętli do pliku są zapisywane liczby od 0 do 9. (9.) Na sam koniec uchwyt do pliku jest zamykany.
Drugi etap polega na wczytaniu danych, więc (10.) teraz plik jest otwierany w trybie odczytu. (11.) Jeśli otwarcie się powiodło to: (12.) po zadeklarowaniu zmiennej można (13. - 17.) odczytać wszystkie dane, aż wszystkie zostaną odczytane. (19.) Na koniec etapu ponownie strumień zostaje zamknięty.
Trzecia część kodu to powtórzenie pierwszej części, ale tym razem (20.) należy pamiętać, że liczba ma zostać dopisana. (21.) Jeśli strumień zostanie otwarty to (22.) liczba 10 zostaje dopisana i (23.) strumień zostaje zamknięty.
Ostatni, czwarty etap polega na znalezieniu maksymalnego elementu w pliku. Jest to etap bardzo podobny do drugiego, ale (27. - 30.) w trakcie odczytywania należy na bieżąco interpretować odczytane dane, ponieważ po odczycie kolejnej liczby nie można pobrać wartości poprzedniej.
Napisz aplikację, która: