En Visual Basic, se admite la manipulación de archivos tanto a través de procedimientos clásicos (FileOpen, Input, Put, Close) como a través de API de .NET (System.IO.StreamReader, StreamWriter, FileStream). Se considera preferible utilizar las clases de .NET.
Sutilezas:
Using para liberar recursos automáticamente.StreamReader/StreamWriter, y para bytes — FileStream.Ejemplo de código:
Dim filePath As String = "test.txt" ' Escribir en el archivo Using writer As New StreamWriter(filePath) writer.WriteLine("¡Hola, mundo!") End Using ' Leer del archivo Using reader As New StreamReader(filePath) Dim content As String = reader.ReadToEnd() End Using
¿Qué sucederá si no se cierra el flujo después de escribir en el archivo a través de StreamWriter, y por qué es importante usar la estructura Using?
Respuesta:
Si no se cierra el flujo (no se llama a Close o no se utiliza Using), los datos almacenados en búfer pueden no escribirse en el disco, ya que el sistema operativo los mantiene en memoria. Además, un flujo no cerrado retiene un descriptor de archivo, lo que puede bloquear el archivo para otros procesos, y en aplicaciones de larga duración, esto puede conducir a fugas de memoria y recursos. La estructura Using asegura que se llame a Dispose incluso si ocurre una excepción.
Historia
Falta de datos repentina: Al generar informes en un banco, el desarrollador no cerró
StreamWriter. Como resultado, parte de los datos no se escribió en el archivo debido a un búfer no liberado, y el departamento de atención al cliente no pudo abrir los informes finales.
Historia
Fugas de descriptores de archivos: En un sistema ERP, los desarrolladores utilizaban apertura manual de archivos y a menudo olvidaban llamar a
Close. Después de unos días, la aplicación fallaba por agotamiento del límite de archivos abiertos.
Historia
Conflicto de bloqueo de archivos: En un servicio de copia de seguridad en red, el archivo se abría sin el modo de acceso correcto, lo que bloqueaba el acceso a otros programas y causaba largos tiempos de inactividad en todo el departamento.