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.