Ugrás a tartalomhoz

fstream library

A Wikiszótárból, a nyitott szótárból
(fstream szócikkből átirányítva)


Főnév

fstream library (tsz. fstream libraries)

  1. (informatika) A fstream a C++ szabványos könyvtára, amely fájlok kezelésére szolgál. Az fstream segítségével fájlokat hozhatunk létre, megnyithatunk, olvashatunk és írhatunk. A könyvtár az iostream bővítményeként működik, így az adatfolyam-alapú (stream) olvasás és írás koncepcióját használja.



1. fstream osztályok

Az fstream három osztályt tartalmaz:

  1. ifstream (input file stream) – fájl beolvasására szolgál (csak olvasás).
  2. ofstream (output file stream) – fájl írására szolgál (csak írás).
  3. fstream (file stream) – fájl egyidejű olvasására és írására szolgál.

Használatához az #include <fstream> fejléckönyvtárat kell beilleszteni a programba.



2. Fájlba írás (ofstream)

A ofstream osztályt használjuk, ha adatokat akarunk írni egy fájlba.

Példa: Egyszerű fájlírás

#include <iostream>
#include <fstream>

int main() {
    std::ofstream file("adatok.txt"); // Fájl megnyitása írásra
    if (file.is_open()) {
        file << "Ez egy fájlba írt szöveg.\n";
        file << "Ez egy újabb sor.\n";
        file.close(); // Fájl bezárása
        std::cout << "Az adatok sikeresen kiíródtak a fájlba.\n";
    } else {
        std::cerr << "Nem sikerült megnyitni a fájlt!\n";
    }
    return 0;
}

🔹 Ha a fájl nem létezik, a program automatikusan létrehozza.
🔹 A file.close() fontos, mert lezárja a fájlt és menti az adatokat.



3. Fájl olvasása (ifstream)

A ifstream osztályt használjuk, ha egy fájlból akarunk adatokat beolvasni.

Példa: Egyszerű fájlolvasás

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::ifstream file("adatok.txt"); // Fájl megnyitása olvasásra
    if (file.is_open()) {
        std::string sor;
        while (std::getline(file, sor)) { // Soronként olvasás
            std::cout << sor << std::endl;
        }
        file.close(); // Fájl bezárása
    } else {
        std::cerr << "Nem sikerült megnyitni a fájlt!\n";
    }
    return 0;
}

🔹 A std::getline(file, sor) segítségével soronként olvassuk be az adatokat.
🔹 Ha a fájl nem létezik, a program hibát jelez.



4. Fájl olvasása és írása egyszerre (fstream)

Ha egy fájlt egyszerre szeretnénk olvasni és írni, akkor az fstream osztályt használjuk.

Példa: Fájl olvasása és új sor hozzáadása

#include <iostream>
#include <fstream>
#include <string>

int main() {
    std::fstream file("adatok.txt", std::ios::in | std::ios::out | std::ios::app); // Megnyitás olvasásra és írásra
    if (file.is_open()) {
        std::string sor;
        std::cout << "A fájl tartalma:\n";
        while (std::getline(file, sor)) {
            std::cout << sor << std::endl;
        }

        file.clear(); // Töröljük az EOF flag-et
        file.seekp(0, std::ios::end); // Mutató mozgatása a fájl végére
        file << "Új sor a fájl végére.\n";
        file.close();
        std::cout << "Új adat hozzáadva a fájlhoz.\n";
    } else {
        std::cerr << "Nem sikerült megnyitni a fájlt!\n";
    }
    return 0;
}

🔹 std::ios::in – Olvasás engedélyezése.
🔹 std::ios::out – Írás engedélyezése.
🔹 std::ios::app – Hozzáfűzés a fájl végéhez.
🔹 seekp(0, std::ios::end) – A fájl végére állítja az írási mutatót.



5. Bináris fájlok kezelése

A bináris fájlokat ios::binary módban kell megnyitni. A write() és read() függvényekkel dolgozunk.

Példa: Bináris fájl írása és olvasása

#include <iostream>
#include <fstream>

struct Adat {
    int id;
    char nev[50];
};

int main() {
    // Bináris fájlba írás
    std::ofstream fout("adatok.bin", std::ios::binary);
    Adat a = {1, "Példa"};
    fout.write(reinterpret_cast<char*>(&a), sizeof(a));
    fout.close();

    // Bináris fájl olvasása
    std::ifstream fin("adatok.bin", std::ios::binary);
    Adat beolvasott;
    fin.read(reinterpret_cast<char*>(&beolvasott), sizeof(beolvasott));
    fin.close();

    std::cout << "ID: " << beolvasott.id << ", Név: " << beolvasott.nev << std::endl;
    return 0;
}

🔹 A reinterpret_cast<char*> segít az adatszerkezet bájtonkénti írásában és olvasásában.
🔹 Bináris fájlok gyorsabbak és hatékonyabbak, de nehezen olvashatók emberi szemmel.



6. Speciális fájlmódok (std::ios módok)

A fájlok megnyitásakor különböző módokat használhatunk:

Mód Leírás
std::ios::in Olvasásra nyitja meg a fájlt
std::ios::out Írásra nyitja meg (törli a régi tartalmat)
std::ios::app Hozzáfűzi az új adatokat a végéhez
std::ios::ate Az írási mutatót a fájl végére állítja
std::ios::trunc Ha a fájl létezik, törli a tartalmát
std::ios::binary Bináris módban nyitja meg

Több mód kombinálása

Ha több módot akarunk kombinálni, | operátorral tehetjük meg:

std::fstream file("adatok.txt", std::ios::in | std::ios::out | std::ios::app);

Összegzés

Az fstream könyvtár segítségével:
Fájlba írhatunk (ofstream)
Fájlból olvashatunk (ifstream)
Olvashatunk és írhatunk egyszerre (fstream)
Bináris fájlokat is kezelhetünk
Többféle megnyitási módot használhatunk

A fájlkezelés az egyik legfontosabb programozási feladat, és az fstream könyvtár hatékony eszköz erre C++-ban. 🚀