Ugrás a tartalomhoz

file input/output

A Wikiszótárból, a nyitott szótárból


Főnév

file input/output (tsz. file input/outputs)

  1. (informatika)

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! 🚀