W Visual Basic obsługuje się pliki zarówno za pomocą klasycznych procedur (FileOpen, Input, Put, Close), jak i za pomocą API .NET (System.IO.StreamReader, StreamWriter, FileStream). Zaleca się stosowanie klas .NET.
Niuanse:
Using, aby automatycznie zwalniać zasoby.StreamReader/StreamWriter, do bajtów — FileStream.Przykład kodu:
Dim filePath As String = "test.txt" ' Zapis do pliku Using writer As New StreamWriter(filePath) writer.WriteLine("Hello, world!") End Using ' Odczyt z pliku Using reader As New StreamReader(filePath) Dim content As String = reader.ReadToEnd() End Using
Co się stanie, jeśli nie zamkniesz strumienia po zapisie do pliku przez StreamWriter i dlaczego ważne jest użycie konstrukcji Using?
Odpowiedź:
Jeśli nie zamkniesz strumienia (nie wywołasz Close lub nie użyjesz Using), zbuforowane dane mogą nie zostać zapisane na dysku, ponieważ system operacyjny przechowuje je w pamięci. Ponadto niezamknięty strumień zatrzymuje deskryptor pliku, co może zablokować dostęp do pliku dla innych procesów, a w długoterminowych aplikacjach prowadzi to do wycieków pamięci i zasobów. Konstrukcja Using gwarantuje wywołanie Dispose nawet w przypadku wystąpienia wyjątku.
Historia
Nagłe zniknięcie danych: Podczas generowania raportów w banku programista nie zamknął
StreamWriter. W rezultacie część danych nie została zapisana w pliku z powodu niezwolnionego bufora, dział obsługi klienta nie mógł otworzyć końcowych raportów.
Historia
Wyciek deskryptorów plików: W systemie ERP programiści używali ręcznego otwierania plików i często zapominali wywoływać
Close. Po kilku dniach aplikacja zawieszała się z powodu wyczerpania limitu otwartych plików.
Historia
Konflikt blokady plików: W sieciowej usłudze kopiowania zapasowego plik był otwierany bez odpowiedniego trybu dostępu, co blokowało dostęp innym programom i powodowało długie przestoje w całym dziale.