std::ios base::openmode
Főnév
std::ios base::openmode (tsz. std::ios base::openmodes)
- (informatika) A C++-ban az
<fstream>(és néha az<iostream>) könyvtár segítségével fájlokat tudunk megnyitni, olvasni, írni.
Ehhez a fájláramlás (stream) objektumokat használjuk:
std::ifstream— input file stream → fájlból olvasásstd::ofstream— output file stream → fájlba írásstd::fstream— input/output file stream → olvasás + írás
Amikor megnyitsz egy fájlt, gyakran szabályozni szeretnéd a megnyitás módját:
- olvasni akarod?
- írni akarod?
- törölje a meglévő tartalmat?
- hozzáfűzni akarod?
- bináris adatot kezeljünk?
Pontosan erre való a std::ios_base::openmode típus!
📌 Mi az a std::ios_base::openmode?
👉 A std::ios_base::openmode egy enumerációs típus (enum), amely flag-eket (jelzőbitek) definiál a fájl megnyitásához.
📜 Definíciója az <ios> fejlécben:
namespace std {
class ios_base {
public:
typedef /* implementation-defined */ openmode;
static const openmode app;
static const openmode binary;
static const openmode in;
static const openmode out;
static const openmode trunc;
static const openmode ate;
};
}
👉 openmode tehát bitflag, amit kombinálni lehet pl. | (bitwise OR) operátorral.
⚙️ A lehetséges flag-ek magyarázata
Most nézzük sorban az összes std::ios_base::openmode értéket:
| Flag | Jelentése |
|---|---|
std::ios::in |
Fájl olvasásra nyitása |
std::ios::out |
Fájl írásra nyitása |
std::ios::app |
Hozzáfűző (append) mód — minden írás a fájl végére kerül |
std::ios::ate |
Megnyitáskor a fájl végére ugrik, de bárhová írhatunk/olvashatunk |
std::ios::trunc |
Megnyitáskor törli a fájl meglévő tartalmát |
std::ios::binary |
Bináris mód — nem szöveges feldolgozás (nincs \n ↔ \r\n átalakítás Windows alatt) |
🗂️ Flag-ek részletesen
1️⃣ std::ios::in
- Cél: fájlt olvasni.
- Használat:
std::ifstreamesetén automatikus. - Ha
fstream-mel nyitsz, ezzel engedélyezed az olvasást.
std::ifstream file("input.txt", std::ios::in);
2️⃣ std::ios::out
- Cél: fájlt írni.
- Használat:
std::ofstreamesetén automatikus. - Ha
fstream-mel nyitsz, ezzel engedélyezed az írást.
std::ofstream file("output.txt", std::ios::out);
3️⃣ std::ios::app
- Cél: írás hozzáfűzéssel.
- Minden írás automatikusan a fájl végére kerül.
- A fájl létezhet már, nem törlődik.
std::ofstream file("log.txt", std::ios::app);
file << "New log entry\n";
4️⃣ std::ios::ate
- Cél: a fájlt megnyitáskor a végére ugrik.
- De: az írás/olvasás helyét te szabályozhatod → lehet máshová is mozogni (seek).
std::ofstream file("file.txt", std::ios::ate);
Különbség app-hez képest:
app: mindig csak a végére ír.ate: induláskor végén vagyunk, de lehet máshová írni is.
5️⃣ std::ios::trunc
- Cél: megnyitáskor törli a fájlt.
- Csak
std::ios::out-tal együtt értelmezett. - Alapértelmezett viselkedés
std::ofstreamesetén.
std::ofstream file("overwrite.txt", std::ios::out | std::ios::trunc);
6️⃣ std::ios::binary
- Cél: bináris módban nyitja meg a fájlt.
- Szöveges mód esetén (alapértelmezés):
- Windows:
\n → \r\nautomatikus átalakítás íráskor/olvasáskor.
- Windows:
- Bináris módban: nincs ilyen átalakítás.
std::ofstream file("image.png", std::ios::out | std::ios::binary);
🚀 Flag-ek kombinálása
A std::ios::openmode flag-ek kombinálhatóak.
Bitwise OR | operátort használunk:
std::fstream file("data.bin", std::ios::in | std::ios::out | std::ios::binary);
- olvasás is
- írás is
- bináris adat
⚠️ Néhány fontos kombináció
| Kombinációk | Jelentés | ||
|---|---|---|---|
std::ios::out |
írni szövegesen (törli a fájlt — trunc implicit) | ||
| `std::ios::out | std::ios::app` | írás hozzáfűzéssel | |
| `std::ios::out | std::ios::trunc` | írni és törölni a meglévő tartalmat | |
std::ios::in |
olvasni | ||
| `std::ios::in | std::ios::out` | olvasni és írni | |
| `std::ios::in | std::ios::out | std::ios::binary` | bináris fájl olvasása/írása |
💻 Példa program
#include <iostream>
#include <fstream>
int main() {
std::fstream file("example.txt", std::ios::in | std::ios::out | std::ios::app);
if (!file.is_open()) {
std::cerr << "Error opening file!\n";
return 1;
}
file << "Appending new line.\n";
file.seekg(0); // Ugrás a fájl elejére
std::string line;
while (std::getline(file, line)) {
std::cout << line << std::endl;
}
file.close();
return 0;
}
🧩 Miért fontos az openmode?
- Pontos szabályozás → mit akarunk csinálni a fájllal.
- Ha rossz flag-et adsz meg:
- nem fogod tudni írni/olvasni.
- véletlenül törlöd a fájlt.
- hibás bináris feldolgozás lesz.
📝 Megjegyzések
Alapértelmezett módok:
Stream osztály Alapértelmezett openmode std::ifstreamstd::ios::instd::ofstream`std::ios::out std::ios::trunc` std::fstreamnincs — meg kell adni Bináris fájlokat mindig
std::ios::binary-vel nyisd meg!
🏁 Összegzés
👉 A std::ios_base::openmode lehetővé teszi, hogy testre szabott módon nyiss fájlokat:
- Olvasás (
in) - Írás (
out) - Hozzáfűzés (
app) - Bináris mód (
binary) - Fájl törlése (
trunc) - Fájl végére ugrás (
ate)
👉 A flag-ek kombinálhatóak.
👉 A jó openmode választás alapfeltétele a helyes fájlkezelésnek!
- std::ios base::openmode - Szótár.net (en-hu)
- std::ios base::openmode - Sztaki (en-hu)
- std::ios base::openmode - Merriam–Webster
- std::ios base::openmode - Cambridge
- std::ios base::openmode - WordNet
- std::ios base::openmode - Яндекс (en-ru)
- std::ios base::openmode - Google (en-hu)
- std::ios base::openmode - Wikidata
- std::ios base::openmode - Wikipédia (angol)