file input/output
Főnév
file input/output (tsz. file input/outputs)
Fájlkezelés C++ nyelven (File I/O)
Bevezetés
A C++ fájlkezelés az fstream könyvtár segítségével történik. Ez a könyvtár három osztályt biztosít a fájlok kezelésére: 1. ifstream (input file stream) – fájlbeolvasás 2. ofstream (output file stream) – fájlírás 3. fstream (file stream) – fájlbeolvasás és fájlírás egyaránt
A fájlok kezelése hasonló a cin és cout műveletekhez, de fájlokkal dolgozunk a standard bemenet és kimenet helyett.
1. Fájl írása (ofstream)
Az ofstream osztály segítségével fájlba tudunk írni. Ehhez: 1. Meg kell nyitni a fájlt egy névvel 2. Be kell írni az adatokat 3. Le kell zárni a fájlt, hogy a rendszer biztosan elmentse az adatokat
1.1. Egyszerű fájlírás
#include <iostream>
#include <fstream> // Fájlkezeléshez szükséges
using namespace std;
int main() {
ofstream fajl("pelda.txt"); // Fájl megnyitása
if (fajl.is_open()) { // Ellenőrizzük, hogy sikerült-e megnyitni
fajl << "Hello, világ!\n";
fajl << "Ez egy fájlírási példa C++-ban.\n";
fajl.close(); // Fájl bezárása
cout << "Az adatok sikeresen ki lettek írva a fájlba." << endl;
} else {
cout << "Nem sikerült megnyitni a fájlt!" << endl;
}
return 0;
}
📌 Magyarázat: - A "pelda.txt" nevű fájlba írunk. - is_open() ellenőrzi, hogy sikeresen megnyílt-e a fájl. - A << operátor segítségével írunk bele. - close() bezárja a fájlt, így az adatok elmentésre kerülnek.
1.2. Adatok hozzáfűzése egy meglévő fájlhoz
Ha egy meglévő fájlhoz szeretnénk új adatokat hozzáadni, akkor az ios::app (append) módot kell használni.
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ofstream fajl("pelda.txt", ios::app); // Hozzáfűzés mód
if (fajl.is_open()) {
fajl << "Új sor hozzáadva!\n";
fajl.close();
cout << "Új adat hozzáfűzve a fájlhoz." << endl;
} else {
cout << "Nem sikerült megnyitni a fájlt!" << endl;
}
return 0;
}
📌 Fontos:
- ios::app mód – a meglévő adatok megmaradnak, az új adatok a fájl végére kerülnek.
2. Fájl olvasása (ifstream)
Az ifstream osztályt használjuk fájlok beolvasására.
2.1. Egyszerű fájlolvasás (getline())
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fajl("pelda.txt"); // Fájl megnyitása olvasásra
if (fajl.is_open()) {
string sor;
while (getline(fajl, sor)) { // Soronként olvassuk a fájlt
cout << sor << endl;
}
fajl.close();
} else {
cout << "Nem sikerült megnyitni a fájlt!" << endl;
}
return 0;
}
📌 Magyarázat:
- getline(fajl, sor) soronként olvassa be a fájl tartalmát. - A while (!fajl.eof()) ciklus végigolvassa a fájlt.
2.2. Fájl olvasása szóközökkel (operator>>)
Ha csak egyes szavakat akarunk beolvasni (szóköz nélkül), akkor a >> operátort használhatjuk:
#include <iostream>
#include <fstream>
using namespace std;
int main() {
ifstream fajl("pelda.txt");
if (fajl.is_open()) {
string szo;
while (fajl >> szo) { // Egyes szavakat olvasunk be
cout << szo << endl;
}
fajl.close();
} else {
cout << "Nem sikerült megnyitni a fájlt!" << endl;
}
return 0;
}
📌 Megjegyzés:
- Minden szó külön kerül beolvasásra (szóköz és sortörés határolja a szavakat).
3. Fájlbeolvasás és -írás (fstream)
Az fstream osztály egyaránt képes olvasni és írni egy fájlba.
3.1. Beolvasás és írás ugyanabban a programban
#include <iostream>
#include <fstream>
using namespace std;
int main() {
fstream fajl("adatok.txt", ios::in | ios::out | ios::app); // Mind olvasásra, mind írásra megnyitjuk
if (fajl.is_open()) {
fajl << "Egy új sor fájlba írva.\n";
fajl.seekg(0); // Fájlpointer visszaállítása az elejére
string sor;
while (getline(fajl, sor)) {
cout << sor << endl;
}
fajl.close();
} else {
cout << "Nem sikerült megnyitni a fájlt!" << endl;
}
return 0;
}
📌 Fontos tudnivalók: - ios::in | ios::out: Olvasási és írási mód egyszerre. - seekg(0): A fájlmutatót visszaállítja az elejére az olvasáshoz.
4. Bináris fájlkezelés (read() és write())
A read() és write() függvényeket bináris fájlokhoz használjuk.
4.1. Bináris fájlba írás
#include <iostream>
#include <fstream>
using namespace std;
struct Ember {
char nev[20];
int kor;
};
int main() {
Ember ember = {"Péter", 30};
ofstream fajl("adatok.dat", ios::binary);
fajl.write(reinterpret_cast<char*>(&ember), sizeof(Ember));
fajl.close();
cout << "Adatok bináris fájlba írva!" << endl;
return 0;
}
4.2. Bináris fájl olvasása
#include <iostream>
#include <fstream>
using namespace std;
struct Ember {
char nev[20];
int kor;
};
int main() {
Ember ember;
ifstream fajl("adatok.dat", ios::binary);
fajl.read(reinterpret_cast<char*>(&ember), sizeof(Ember));
fajl.close();
cout << "Név: " << ember.nev << ", Kor: " << ember.kor << endl;
return 0;
}
📌 Megjegyzés:
- Bináris fájlok nem emberi olvashatóak, de gyorsabbak lehetnek. - reinterpret_cast<char*> konverzió szükséges az adatok írásához és olvasásához.
Összegzés
| Művelet | Osztály | Módszer |
|---|---|---|
| Fájlba írás | ofstream |
<<, write() |
| Fájl olvasása | ifstream |
getline(), >>, read() |
| Olvasás és írás egyszerre | fstream |
<<, >>, seekg() |
C++ fájlkezelése egyszerű, gyors és hatékony, legyen szó szöveges vagy bináris fájlokról! 🚀
- file input/output - Szótár.net (en-hu)
- file input/output - Sztaki (en-hu)
- file input/output - Merriam–Webster
- file input/output - Cambridge
- file input/output - WordNet
- file input/output - Яндекс (en-ru)
- file input/output - Google (en-hu)
- file input/output - Wikidata
- file input/output - Wikipédia (angol)