Zie verder
Even terugblikken
In dit hoofdstuk dook je in
System.IO: paths samenstellen metPath.Combine, controleren of een bestand bestaat, en tekst of binaire data lezen en schrijven. Je leerde ook objecten serialiseren naar JSON en terug, zodat je de staat van je programma kan bewaren. Omdat je nu buiten je programma werkt, werd exception handling plots essentieel.
De kern op een rij:
FileenDirectoryzijn static;FileInfoenDirectoryInfomaak je eerst aan metnew.- Een
StreamWriterofStreamReaderzet je in eenusing-blok zodat het bestand gegarandeerd weer vrijkomt, ook bij een fout. - Voor kleine bestanden volstaan
File.ReadAllTextofFile.ReadAllLines; voor grote bestanden lees je regel per regel met eenStreamReader. - Met
JsonSerializer(uitSystem.Text.Json) serialiseer en deserialiseer je objecten; enkel publieke properties komen mee.
- Een bestand pad bestaat niet altijd waar je denkt, en je hebt niet altijd de juiste rechten. Werk dus altijd met try-catch (bv.
UnauthorizedAccessException,FileNotFoundException). - Bij een
BinaryReadermoet je in exact dezelfde volgorde lezen als je geschreven hebt, anders crasht je programma (bv. eenEndOfStreamException). File.Creategeeft een openFileStreamterug: sluit die meteen met eenusing, anders blijft het bestand gelockt.
In andere talen
Een bestand lezen
In Python doet het with open-blok exact wat ons using-blok doet: het bestand gaat automatisch dicht aan het einde van het blok, ook als er een fout optreedt.
with open("dagboek.txt") as f:
inhoud = f.read()
# f is hier al netjes geslotenWaar C# een aparte StreamReader en een using nodig heeft, vangt Python beide in één korte regel.
JSON in JavaScript
JSON staat voor JavaScript Object Notation, en het komt dus letterlijk uit JavaScript. Daar heb je geen aparte JsonSerializer nodig: serialiseren zit ingebouwd via JSON.stringify.
const student = { naam: "Barry", leeftijd: 25, uitgeschreven: true };
const jsonString = JSON.stringify(student);
console.log(jsonString); // {"naam":"Barry","leeftijd":25,"uitgeschreven":true}Omdat JSON uit JavaScript stamt, is een JavaScript-object en zijn JSON-voorstelling bijna hetzelfde ding.
JSON in Python
Python pakt JSON aan met zijn ingebouwde json-module: json.dumps serialiseert, json.loads deserialiseert.
import json
student = {"naam": "Barry", "leeftijd": 25, "uitgeschreven": True}
json_string = json.dumps(student) # object -> JSON-tekst
terug = json.loads(json_string) # JSON-tekst -> dictVerschil met C#: je hoeft bij het deserialiseren geen type mee te geven. Python geeft je gewoon een dict terug, terwijl C# weet bij welke klasse de data hoort via Deserialize<Student>.
Zoek de fout
Onderstaande Python-code schrijft een dagboekregel weg, maar het bestand blijft soms leeg of half geschreven, zeker als er verderop iets misloopt. Wat zou je beter doen?
f = open("dagboek.txt", "w")
f.write("Beste dagboek...")
# code die crasht voor de volgende regel
f.close()Als de code tussen open en close crasht, wordt f.close() nooit bereikt en blijft het bestand open (en mogelijk leeg of gelockt). Gebruik een with open(...)-blok: dan sluit Python het bestand sowieso, net zoals een using-blok in C#.
with open("dagboek.txt", "w") as f:
f.write("Beste dagboek...")
In dit hoofdstuk dook je in