C++ Rukovanje datotekama: Kako otvoriti, pisati, čitati, zatvoriti datoteke C++
U čemu je rukovanje datotekama C++?
Datoteke trajno pohranjuju podatke u uređaj za pohranu. Uz rukovanje datotekama, izlaz iz programa može se pohraniti u datoteku. Nad podacima se mogu izvoditi razne operacije dok su u datoteci.
Tok je apstrakcija uređaja gdje se izvode ulazno/izlazne operacije. Tok možete predstaviti ili kao odredište ili kao izvor znakova neodređene duljine. To će biti određeno njihovom upotrebom. C++ pruža vam biblioteku koja dolazi s metodama za rukovanje datotekama. Raspravljajmo o tome.
Knjižnica fstream
Knjižnica fstream pruža C++ programeri s tri klase za rad s datotekama. Ove klase uključuju:
- ofstream– Ova klasa predstavlja izlazni tok. Koristi se za stvaranje datoteka i pisanje informacija u datoteke.
- ifstream– Ova klasa predstavlja ulazni tok. Koristi se za čitanje informacija iz podatkovnih datoteka.
- fstream– Ova klasa općenito predstavlja tok datoteke. Dolazi s ofstream/ifstream mogućnostima. To znači da može stvarati datoteke, pisati u datoteke, čitati iz podatkovnih datoteka.
Sljedeća slika olakšava razumijevanje:
Da biste koristili gornje klase biblioteke fstream, morate je uključiti u svoj program kao datoteku zaglavlja. Naravno, koristit ćete #include direktivu pretprocesora. Također morate uključiti iostream datoteku zaglavlja.
Kako otvoriti datoteke
Prije izvođenja bilo kakve operacije na datoteci, prvo je morate otvoriti. Ako trebate pisati u datoteku, otvorite je koristeći fstream ili ofstream objekte. Ako trebate samo čitati iz datoteke, otvorite je pomoću ifstream objekta.
Tri objekta, to jest fstream, ofstream i ifstream, imaju definiranu funkciju open(). Funkcija ima ovu sintaksu:
open (file_name, mode);
- Parametar file_name označava naziv datoteke koju treba otvoriti.
- Parametar načina rada nije obavezan. Može uzeti bilo koju od sljedećih vrijednosti:
Još malo brojeva | Description |
---|---|
ios:: aplikacija | Način dodavanja. Izlaz poslan u datoteku dodaje se njoj. |
ios::jesti | Otvara datoteku za izlaz, a zatim premješta kontrolu čitanja i pisanja na kraj datoteke. |
ios::in | Otvara datoteku za čitanje. |
ios::out | Otvara datoteku za pisanje. |
ios::trunc | Ako datoteka postoji, elementi datoteke trebaju biti skraćeni prije njenog otvaranja. |
Moguće je koristiti dva načina rada istovremeno. Kombinirate ih pomoću | (OR) operator.
Primjer 1:
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file", ios::out); if (!my_file) { cout << "File not created!"; } else { cout << "File created successfully!"; my_file.close(); } return 0; }
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite iostream datoteku zaglavlja u program da biste koristili njegove funkcije.
- Uključite fstream datoteku zaglavlja u program za korištenje njegovih klasa.
- Uključite prostor imena std u naš kod da biste koristili njegove klase bez pozivanja.
- Pozovite funkciju main(). Programska logika treba ići unutar njegovog tijela.
- Napravite objekt klase fstream i dajte mu ime my_file.
- Primijenite funkciju open() na gornji objekt za stvaranje nove datoteke. Izlazni način nam omogućuje pisanje u datoteku.
- Upotrijebite naredbu if da provjerite je li stvaranje datoteke uspjelo.
- Poruka za ispis na konzoli ako datoteka nije stvorena.
- Kraj tijela if naredbe.
- Upotrijebite naredbu else da navedete što učiniti ako je datoteka stvorena.
- Poruka za ispis na konzoli ako je datoteka stvorena.
- Primijenite funkciju close() na objekt da biste zatvorili datoteku.
- Kraj tijela else naredbe.
- Program mora vratiti vrijednost ako uspješno završi.
- Kraj tijela funkcije main().
Kako zatvoriti datoteke
Jednom C++ program prekida, automatski
- ispire potoke
- oslobađa dodijeljenu memoriju
- zatvara otvorene datoteke.
Međutim, kao programer, trebali biste naučiti zatvoriti otvorene datoteke prije nego što program završi.
Objekti fstream, ofstream i ifstream imaju funkciju close() za zatvaranje datoteka. Funkcija ima ovu sintaksu:
void close();
Kako pisati u datoteke
Možete pisati u datoteku izravno sa svog C++ program. Za to koristite operator umetanja toka (<<). Tekst koji se upisuje u datoteku treba biti u dvostrukim navodnicima.
Pokažimo ovo.
Primjer 2:
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file.txt", ios::out); if (!my_file) { cout << "File not created!"; } else { cout << "File created successfully!"; my_file << "Guru99"; my_file.close(); } return 0; }
Izlaz:
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite iostream datoteku zaglavlja u program da biste koristili njegove funkcije.
- Uključite fstream datoteku zaglavlja u program za korištenje njegovih klasa.
- Uključite prostor imena std u program kako biste koristili njegove klase bez pozivanja.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Napravite instancu klase fstream i dajte joj ime my_file.
- Koristite funkciju open() za stvaranje nove datoteke pod nazivom my_file.txt. Datoteka će se otvoriti u izlaznom načinu rada za upisivanje u nju.
- Upotrijebite naredbu if da provjerite je li datoteka otvorena.
- Tekst za ispis na konzoli ako se datoteka ne otvori.
- Kraj tijela naredbe if.
- Upotrijebite naredbu else da navedete što učiniti ako je datoteka stvorena.
- Tekst za ispis na konzoli ako je datoteka stvorena.
- Napišite tekst u stvorenu datoteku.
- Za zatvaranje datoteke koristite funkciju close().
- Kraj tijela else naredbe.
- Program mora vratiti vrijednost nakon uspješnog završetka.
- Kraj tijela funkcije main().
Kako čitati iz datoteka
Možete čitati informacije iz datoteka u svoje C++ program. To je moguće pomoću operatora za izdvajanje toka (>>). Operator koristite na isti način na koji ga koristite za čitanje korisničkog unosa s tipkovnice. Međutim, umjesto korištenja cin objekta, koristite ifstream/fstream objekt.
Primjer 3:
#include <iostream> #include <fstream> using namespace std; int main() { fstream my_file; my_file.open("my_file.txt", ios::in); if (!my_file) { cout << "No such file"; } else { char ch; while (1) { my_file >> ch; if (my_file.eof()) break; cout << ch; } } my_file.close(); return 0; }
Izlaz:
Nema takve datoteke
Evo snimke zaslona koda:
Objašnjenje koda:
- Uključite iostream datoteku zaglavlja u program da biste koristili njegove funkcije.
- Uključite fstream datoteku zaglavlja u program za korištenje njegovih klasa.
- Uključite prostor imena std u program kako biste koristili njegove klase bez pozivanja.
- Pozovite funkciju main(). Programsku logiku treba dodati unutar tijela ove funkcije.
- Napravite instancu klase fstream i dajte joj ime my_file.
- Koristite funkciju open() za stvaranje nove datoteke pod nazivom my_file.txt. Datoteka će se otvoriti u načinu rada za čitanje iz nje.
- Upotrijebite naredbu if da provjerite postoji li datoteka.
- Tekst za ispis na konzoli ako datoteka nije pronađena.
- Kraj tijela naredbe if.
- Upotrijebite naredbu else da odredite što učiniti ako se datoteka pronađe.
- Napravite char varijabla nazvan pogl.
- Napravite dok petlje za ponavljanje sadržaja datoteke.
- Zapišite/pohranite sadržaj datoteke u varijablu ch.
- Upotrijebite if uvjet i eof() funkciju koja je, kraj datoteke, kako biste osigurali da kompajler nastavi čitati iz datoteke ako kraj nije dosegnut.
- Upotrijebite naredbu break da zaustavite čitanje iz datoteke kada se dosegne kraj.
- Ispis sadržaja varijable ch na konzoli.
- Kraj dok tijela.
- Kraj tijela else naredbe.
- Pozovite funkciju close() da biste zatvorili datoteku.
- Program mora vratiti vrijednost nakon uspješnog završetka.
- Kraj tijela funkcije main().
rezime
- Uz rukovanje datotekama, izlaz programa može se poslati i pohraniti u datoteku.
- Broj operacija se zatim može primijeniti na podatke dok su u datoteci.
- Tok je apstrakcija koja predstavlja uređaj na kojem se izvode ulazno/izlazne operacije.
- Tok se može predstaviti kao odredište ili kao izvor znakova neodređene duljine.
- Knjižnica fstream pruža C++ programeri s metodama za rukovanje datotekama.
- Da biste koristili biblioteku, morate je uključiti u svoj program koristeći #include direktivu pretprocesora.