In Visual Basic wordt bestandsbeheer ondersteund via zowel klassieke procedures (FileOpen, Input, Put, Close) als via de .NET API (System.IO.StreamReader, StreamWriter, FileStream). Het is aan te raden de .NET-klassen te gebruiken.
Nuances:
Using-constructies te gebruiken om resources automatisch vrij te geven.StreamReader/StreamWriter voor het lezen en schrijven van strings, en FileStream voor bytes.Voorbeeldcode:
Dim filePath As String = "test.txt" ' Schrijven naar bestand Using writer As New StreamWriter(filePath) writer.WriteLine("Hallo, wereld!") End Using ' Lezen uit bestand Using reader As New StreamReader(filePath) Dim content As String = reader.ReadToEnd() End Using
Wat gebeurt er als je de stream niet sluit na het schrijven naar een bestand via StreamWriter, en waarom is het belangrijk om de Using-constructie te gebruiken?
Antwoord:
Als je de stream niet sluit (geen Close aanroept of geen Using gebruikt), kunnen gebufferde gegevens niet naar de schijf worden geschreven, omdat het besturingssysteem ze in het geheugen bewaart. Bovendien houdt een niet gesloten stream het bestandshandle vast, waardoor het bestand vergrendeld kan zijn voor andere processen, en in langlopende applicaties leidt dit tot geheugen- en resourcelekken. De Using-constructie garandeert dat Dispose wordt aangeroepen, zelfs bij het ontstaan van een uitzondering.
Verhaal
Onverwacht gegevensverlies: Bij het genereren van rapporten in een bank sloot de ontwikkelaar de
StreamWriterniet. Dit zorgde ervoor dat een deel van de gegevens niet in het bestand werd geschreven vanwege de niet-vrijgegeven buffer, de klantenservice kon de eindrapporten niet openen.
Verhaal
Bestandshandlelek: In een ERP-systeem gebruikten ontwikkelaars handmatig bestanden te openen en vergaten vaak
Closeaan te roepen. Na enkele dagen viel de applicatie uit door het bereiken van de limiet voor open bestanden.
Verhaal
Conflict in bestandsvergrendeling: In een netwerk back-updienst werd een bestand geopend zonder de juiste toegangsmodus, wat de toegang voor andere programma's blokkeerde en leidde tot langdurige stilstand binnen de hele afdeling.