Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Aprende Lectura de Archivos Utilizando StreamReader | Estructuras de Datos y Manejo de Archivos
C# Más Allá de lo Básico

bookLectura de Archivos Utilizando StreamReader

Puedes abrir y leer archivos utilizando el lenguaje de programación C#.

Para leer un archivo, se crea un nuevo objeto StreamReader. El objeto StreamReader recibe la ruta del archivo.

Note
Nota

El término "objeto" se aclarará en secciones posteriores, pero para fines de comprensión: un objeto es simplemente una instancia de un tipo de dato, y StreamReader es un tipo de dato al igual que int o float. Por lo tanto, los valores 1, 2.5f y "Hello World" pueden considerarse técnicamente como "objetos" de los tipos de datos int, float y string respectivamente.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Aquí fileVarName representa el nombre de la variable en la que se almacenará el objeto StreamReader, y fullPath debe ser la ruta completa del archivo en forma de cadena de texto.

Por ejemplo, se puede abrir un archivo "text.txt" en el Escritorio que tiene la ruta C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Nota

También se puede utilizar la declaración implícita para acortar ligeramente la sintaxis: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Considere que el archivo text.txt tiene el siguiente contenido:

text.txt

text.txt

copy
12345
This is some example text

Un objeto StreamReader tiene un método ReadLine que lee una línea del archivo y la retorna:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Salida:

This

El método ReadLine cambia automáticamente el cursor a la siguiente línea, por lo que cuando se llama de nuevo, lee la siguiente línea si existe; de lo contrario, simplemente devuelve null (nada):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Salida:

This
is
some
example
text

Para leer todas las líneas de un archivo, se puede utilizar el bucle while con una condición que verifica si la siguiente línea es null o no. A continuación se muestra una forma sencilla de hacerlo:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Salida:

This
is
some
example
text

Es posible hacer que el código anterior sea un poco más limpio utilizando un truco; para ello, revisemos las sentencias de asignación. Una sentencia de asignación también tiene un valor de retorno, que es el valor que se está asignando. Esto se puede entender con un ejemplo:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Salida:

7

Se muestra 7 porque la instrucción a = 7 retorna 7, que es el valor asignado a a.

Esta información permite realizar acciones creativas, como asignar el mismo valor a varias variables en una sola instrucción:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Salida:

9
9
9

Utilizando esta información, es posible modificar el código de lectura de archivos para hacerlo más breve eliminando código innecesario:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Dentro de la condición, primero se utilizó una instrucción de asignación line = textFile.ReadLine(), que actualiza automáticamente la variable line y luego verifica si es null a partir del valor de retorno de la instrucción.

Después de leer el archivo, también se debe cerrarlo utilizando el método Close; de lo contrario, puede causar fugas de memoria o el archivo puede quedar bloqueado y ser inaccesible desde otros lugares mientras el programa esté en ejecución.

El código final se verá así:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 6

Pregunte a AI

expand

Pregunte a AI

ChatGPT

Pregunte lo que quiera o pruebe una de las preguntas sugeridas para comenzar nuestra charla

Suggested prompts:

Can you explain how the assignment inside the while loop works?

What happens if I forget to close the StreamReader?

Can you show how to handle errors when reading a file?

Awesome!

Completion rate improved to 2.04

bookLectura de Archivos Utilizando StreamReader

Desliza para mostrar el menú

Puedes abrir y leer archivos utilizando el lenguaje de programación C#.

Para leer un archivo, se crea un nuevo objeto StreamReader. El objeto StreamReader recibe la ruta del archivo.

Note
Nota

El término "objeto" se aclarará en secciones posteriores, pero para fines de comprensión: un objeto es simplemente una instancia de un tipo de dato, y StreamReader es un tipo de dato al igual que int o float. Por lo tanto, los valores 1, 2.5f y "Hello World" pueden considerarse técnicamente como "objetos" de los tipos de datos int, float y string respectivamente.

index.cs

index.cs

copy
1
StreamReader fileVarName = new StreamReader(fullPath);

Aquí fileVarName representa el nombre de la variable en la que se almacenará el objeto StreamReader, y fullPath debe ser la ruta completa del archivo en forma de cadena de texto.

Por ejemplo, se puede abrir un archivo "text.txt" en el Escritorio que tiene la ruta C:/Users/Admin/Desktop/text.txt:

index.cs

index.cs

copy
1
StreamReader textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");
Note
Nota

También se puede utilizar la declaración implícita para acortar ligeramente la sintaxis: var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt");

Considere que el archivo text.txt tiene el siguiente contenido:

text.txt

text.txt

copy
12345
This is some example text

Un objeto StreamReader tiene un método ReadLine que lee una línea del archivo y la retorna:

index.cs

index.cs

copy
1234
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); Console.WriteLine(line);

Salida:

This

El método ReadLine cambia automáticamente el cursor a la siguiente línea, por lo que cuando se llama de nuevo, lee la siguiente línea si existe; de lo contrario, simplemente devuelve null (nada):

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); Console.WriteLine(textFile.ReadLine()); // This Console.WriteLine(textFile.ReadLine()); // is Console.WriteLine(textFile.ReadLine()); // some Console.WriteLine(textFile.ReadLine()); // example Console.WriteLine(textFile.ReadLine()); // text Console.WriteLine(textFile.ReadLine()); // NULL

Salida:

This
is
some
example
text

Para leer todas las líneas de un archivo, se puede utilizar el bucle while con una condición que verifica si la siguiente línea es null o no. A continuación se muestra una forma sencilla de hacerlo:

index.cs

index.cs

copy
12345678
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line = textFile.ReadLine(); while(line != null) { Console.WriteLine(line); line = textFile.ReadLine(); }

Salida:

This
is
some
example
text

Es posible hacer que el código anterior sea un poco más limpio utilizando un truco; para ello, revisemos las sentencias de asignación. Una sentencia de asignación también tiene un valor de retorno, que es el valor que se está asignando. Esto se puede entender con un ejemplo:

index.cs

index.cs

copy
12
int a; Console.WriteLine(a = 7);

Salida:

7

Se muestra 7 porque la instrucción a = 7 retorna 7, que es el valor asignado a a.

Esta información permite realizar acciones creativas, como asignar el mismo valor a varias variables en una sola instrucción:

index.cs

index.cs

copy
123456789
int a = 1; int b = 1; int c = 1; a = b = c = 9; Console.WriteLine(a); Console.WriteLine(b); Console.WriteLine(c);

Salida:

9
9
9

Utilizando esta información, es posible modificar el código de lectura de archivos para hacerlo más breve eliminando código innecesario:

index.cs

index.cs

copy
1234567
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while((line = textFile.ReadLine()) != null) { Console.WriteLine(line); }

Dentro de la condición, primero se utilizó una instrucción de asignación line = textFile.ReadLine(), que actualiza automáticamente la variable line y luego verifica si es null a partir del valor de retorno de la instrucción.

Después de leer el archivo, también se debe cerrarlo utilizando el método Close; de lo contrario, puede causar fugas de memoria o el archivo puede quedar bloqueado y ser inaccesible desde otros lugares mientras el programa esté en ejecución.

El código final se verá así:

index.cs

index.cs

copy
123456789
var textFile = new StreamReader("C:/Users/Admin/Desktop/text.txt"); string line; while ((line = textFile.ReadLine()) != null) { Console.WriteLine(line); } textFile.Close();
question-icon
=();

Click or drag`n`drop items and fill in the blanks

¿Todo estuvo claro?

¿Cómo podemos mejorarlo?

¡Gracias por tus comentarios!

Sección 1. Capítulo 6
some-alt