Fájlkezelés
open()open() függvény megnyitja írásra, olvasásra a fájlt, majd a read(), és readline() beolvassa, vagy a write() módosítja és végül a close() lezárja a folyamatot.
1A Létező fájl beolvasása (read)
1fajl = open("proba.txt", "r", encoding="utf-8")
2
3tartalom = fajl.read()
4
5fajl.close()
6
7print(tartalom)
1#include <iostream>
2#include <fstream>
3#include <string>
4using namespace std;
5
6int main(){
7 ifstream fajl;
8 fajl.open("proba.txt");
9
10 string tartalom;
11 string sor;
12 while (getline (fajl, sor)) {
13 tartalom = tartalom + sor + "\n";
14 }
15
16 fajl.close();
17
18 cout << tartalom;
19
20 return 0;
21}
Ha a read() függvény paramétereként megadunk egy számot, akkor annyi karaktert olvas be és a következő read(), vagy readline() függvények onnan folytatják a beolvasást.
1B Létező fájl beolvasása soronként readline() függvénnyel
1fajl = open("proba.txt", "r", encoding="utf-8")
2
3sor1 = fajl.readline()
4sor2 = fajl.readline()
5sor3 = fajl.readline()
6
7fajl.close()
8
9print(sor1)
10print(sor2)
11print(sor3)
1#include <iostream>
2#include <fstream>
3#include <string>
4using namespace std;
5
6int main(){
7 ifstream fajl("proba.txt");
8
9 string sor1;
10 getline(fajl, sor1);
11 string sor2;
12 getline(fajl, sor2);
13 string sor3;
14 getline(fajl, sor3);
15
16 fajl.close();
17
18 cout << sor1 << endl;
19 cout << sor2 << endl;
20 cout << sor3 << endl;
21
22 return 0;
23}
A readline() függvény csak egy sort olvas be, így annyiszor kell lefuttatni, ahány sorból áll a fájl. Ha nem ismerjük előre a sorok számát, akkor nem szerencsés.
1C Létező fájl beolvasása soronként for ciklusban
1fajl = open("proba.txt", "r", encoding="utf-8")
2
3for sor in fajl:
4 print(sor)
5
6fajl.close()
1#include <iostream>
2#include <fstream>
3#include <string>
4using namespace std;
5
6int main(){
7 ifstream fajl("proba.txt");
8
9 string sor;
10 while (getline(fajl, sor)) {
11 cout << sor << endl;
12 }
13
14 fajl.close();
15
16 return 0;
17}
Ebben a példában a for ciklus úgy megy végig az f objektumon, mintha az egy sorokat tartalmazó lista lenne.
Ezzel szemben az f nem egy lista, hanem egy objektum, így közvetlenül nem tudjuk elérni az adatsorokat és például nem is tudjuk megmondani a len() föggvénnyel a sorok számát. Ha mégis tudni akarjuk a sorok számát, akkor egy for ciklussal kell megszámolnunk.
1D Létező fájl beolvasása a readline() és a for ciklus egymás után alkalmazásával
1fajl = open("proba.txt", "r", encoding="utf-8")
2
3sor1 = fajl.readline()
4
5for sor in fajl:
6 print(sor)
7
8fajl.close()
1#include <iostream>
2#include <fstream>
3#include <string>
4using namespace std;
5
6int main(){
7 ifstream fajl("proba.txt");
8
9 string sor1;
10 getline(fajl, sor1);
11
12 string sor;
13 while (getline(fajl, sor)) {
14 cout << sor << endl;
15 }
16
17 fajl.close();
18
19 return 0;
20}
Ebben a példában a readline beolvas egy sort, majd a for ciklus a következő sortól folytatja a soronkénti beolvasást. Akkor lehet hasznos, ha az első sor fejlécet, mezőneveket, vagy egyéb más információt tárol és a többi sor adatsorokat tartalmaznak.
További példák adatok beolvasására és listába betöltésére az Adatszerkezet menüpontban találhatóak.
2A Létező fájl tartalmának felülírása (write)
1fajl = open("proba.txt", "w", encoding="utf-8")
2
3fajl.write("Csak ez a szöveg lesz a proba.txt fájl tartalma függetlenül attól, hogy előtte volt-e benne valami.\n")
4fajl.write("Ha a fájl nem létezett, akkor létrejön ezzel a tartalommal.\n")
5
6fajl.close()
1#include <iostream>
2#include <fstream>
3using namespace std;
4
5int main(){
6 ofstream fajl;
7 fajl.open("proba.txt");
8
9 fajl << "Csak ez a szöveg lesz a proba.txt fájl tartalma függetlenül attól, hogy előtte volt-e benne valami.\n";
10 fajl << "Ha a fájl nem létezett, akkor létrejön ezzel a tartalommal.\n";
11
12 fajl.close();
13
14 return 0;
15}
2B Létező fájlban hozzáírás a végére (append)
1fajl = open("proba.txt", "a", encoding="utf-8")
2
3fajl.write("Ez a szöveg a proba.txt fájl végére íródik.\n")
4fajl.write("Ha a fájl nem létezett, akkor létrejön ezzel a tartalommal.\n")
5
6fajl.close()
1#include <iostream>
2#include <fstream>
3using namespace std;
4
5int main(){
6 ofstream fajl;
7 fajl.open("proba.txt", std::ios_base::app);
8
9 fajl << "Ez a szöveg a proba.txt fájl végére íródik.\n";
10 fajl << "Ha a fájl nem létezett, akkor létrejön ezzel a tartalommal.\n";
11
12 fajl.close();
13
14 return 0;
15}
2C Létező fájlban hozzáírás a végére a print() függvénnyel
1print('hozzáfűzött szöveg', file=open('proba.txt', 'a'))
2print('újabb sor', file=open('proba.txt', 'a'))
3print('Ennél a megoldásnál nem kell close() és write() függvény.', file=open('proba.txt', 'a'))
4print('Sorvég karakter sem kell, mert a print() függvényben már van.', file=open('proba.txt', 'a'))
Itt a print függvény nem a képernyőre, hanem a file paraméterben megadott open függvénnyel megnyitott fájlba ír.
A példában a \n jel jelenti a sorvég karaktert, azaz sortörést.