In Visual Basic wird die Arbeit mit Dateien sowohl über klassische Prozeduren (FileOpen, Input, Put, Close) als auch über .NET-API (System.IO.StreamReader, StreamWriter, FileStream) unterstützt. Es wird als vorteilhaft angesehen, .NET-Klassen zu verwenden.
Feinheiten:
Using-Konstrukte zu verwenden, um Ressourcen automatisch freizugeben.StreamReader/StreamWriter zum Lesen und Schreiben von Zeichenfolgen, FileStream für Bytes.Beispielcode:
Dim filePath As String = "test.txt" ' Schreiben in die Datei Using writer As New StreamWriter(filePath) writer.WriteLine("Hallo, Welt!") End Using ' Lesen aus der Datei Using reader As New StreamReader(filePath) Dim content As String = reader.ReadToEnd() End Using
Was passiert, wenn Sie den Stream nach dem Schreiben in die Datei über StreamWriter nicht schließen, und warum ist es wichtig, die Using-Konstruktion zu verwenden?
Antwort:
Wenn Sie den Stream nicht schließen (keinen Close-Aufruf durchführen oder Using nicht verwenden), werden die gepufferten Daten möglicherweise nicht auf die Festplatte geschrieben, da das Betriebssystem sie im Speicher behält. Außerdem hält ein nicht geschlossener Stream den Dateideskriptor, und die Datei kann für andere Prozesse gesperrt sein, was in langlebigen Anwendungen zu Speicher- und Ressourcenverlust führen kann. Die Using-Konstruktion gewährleistet den Aufruf von Dispose, selbst wenn eine Ausnahme auftritt.
Geschichte
Plötzlicher Datenverlust: Bei der Erstellung von Berichten in einer Bank hat der Entwickler
StreamWriternicht geschlossen. Infolgedessen wurden Teile der Daten aufgrund eines nicht freigegebenen Puffers nicht in die Datei geschrieben, die Kundenserviceabteilung konnte die Abschlussberichte nicht öffnen.
Geschichte
Dateideskriptorleck: In einem ERP-System verwendeten die Entwickler das manuelle Öffnen von Dateien und vergaßen oft,
Closeaufzurufen. Nach wenigen Tagen stürzte die Anwendung aufgrund des Erschöpfens der Anzahl der geöffneten Dateien ab.
Geschichte
Dateisperrkonflikt: In einem Netzwerk-Backup-Dienst wurde die Datei ohne den richtigen Zugriffsmodus geöffnet, was den Zugriff für andere Programme sperrte und längere Ausfallzeiten im gesamten Abteilung verursachte.