Pregunta básica de ficheros

28/07/2003 - 20:29 por Diego F. | Informe spam
Hola, tengo un buen lío con las clases para manejar ficheros. ¿Alguien me
podría poner el código para leer líneas de un fichero de texto y mostrarlas
en pantalla simplemente?

Gracias por la ayuda.


Saludos,

Diego F.

Preguntas similare

Leer las respuestas

#1 William Fernández
28/07/2003 - 21:20 | Informe spam
StreamReader sr = new StreamReader("C:\\test.txt");
sr.BaseStream.Seek(0, SeekOrigin.Begin);
while (sr.Peek() > -1) {
filaLeida = sr.ReadLine();
MessageBox.Show(filaLeida)
}
sr.Close();

Puedes hacer algo por el estilo, no se si realmente este código como tal
compile, pero es la idea básica


TSU. William Fernández
Analista de Sistemas
Lab. Behrens.
Caracas - Venezuela
Telf. 58-212-7315250
EMail:
"Diego F." escribió en el mensaje
news:%
Hola, tengo un buen lío con las clases para manejar ficheros. ¿Alguien me
podría poner el código para leer líneas de un fichero de texto y


mostrarlas
en pantalla simplemente?

Gracias por la ayuda.


Saludos,

Diego F.


Respuesta Responder a este mensaje
#2 Diego F.
29/07/2003 - 00:43 | Informe spam
Gracias por el código, sólo tengo una duda: ¿por qué ese using?


Saludos,

Diego F.

"Diego Gonzalez" escribió en el mensaje
news:
using System.IO;

using( StreamReader sr = new StreamReader( "c:\\autoexec.bat" ) ) // :)
{
string line = sr.ReadLine();
while( line != null )
{
Console.WriteLine( line );
}
}

(el código lo escribí en el mail puede que tenga algo pero es mas o meno
así)

Diego González
Lagash Systems SA
"Diego F." wrote in message
news:#
> Hola, tengo un buen lío con las clases para manejar ficheros. ¿Alguien


me
> podría poner el código para leer líneas de un fichero de texto y
mostrarlas
> en pantalla simplemente?
>
> Gracias por la ayuda.
>
>
> Saludos,
>
> Diego F.
>
>


Respuesta Responder a este mensaje
#3 Octavio Hernández
29/07/2003 - 10:44 | Informe spam
Añadiendo a la respuesta de Tristán, usar Dispose() sobre ficheros es
equivalente a utilizar Close() porque el método Dispose() de las clases
stream internamente lo que hace es llamar a Close().

Yo la mayor utilidad de using la veo como mecanismo de protección que
garantiza que el fichero se cerrará SIEMPRE, aún en el caso de que ocurra
cualquier excepción dentro del bloque. O sea, esto:

using (StreamReader sr = new StreamReader( "c:\\autoexec.bat" ) ) {
string line = sr.ReadLine();
while( line != null )
Console.WriteLine( line );
}

equivale a esto:

{
StreamReader sr = new StreamReader( "c:\\autoexec.bat" ) ;
try {
string line = sr.ReadLine();
while( line != null ) // si ocurre una excepción aquí, el
fichero de todos modos se cerrará antes de salir del bloque
Console.WriteLine( line );
}
finally {
sr.Dispose(); // que internamente llama a Close();
}
}
}

Salu2 - Octavio
Respuesta Responder a este mensaje
#4 Diego F.
29/07/2003 - 11:41 | Informe spam
Muchas gracias a todos.


Saludos,

Diego F.

"Octavio Hernández" escribió en el mensaje
news:%
Añadiendo a la respuesta de Tristán, usar Dispose() sobre ficheros es
equivalente a utilizar Close() porque el método Dispose() de las clases
stream internamente lo que hace es llamar a Close().

Yo la mayor utilidad de using la veo como mecanismo de protección que
garantiza que el fichero se cerrará SIEMPRE, aún en el caso de que ocurra
cualquier excepción dentro del bloque. O sea, esto:

using (StreamReader sr = new StreamReader( "c:\\autoexec.bat" ) ) {
string line = sr.ReadLine();
while( line != null )
Console.WriteLine( line );
}

equivale a esto:

{
StreamReader sr = new StreamReader( "c:\\autoexec.bat" ) ;
try {
string line = sr.ReadLine();
while( line != null ) // si ocurre una excepción aquí,


el
fichero de todos modos se cerrará antes de salir del bloque
Console.WriteLine( line );
}
finally {
sr.Dispose(); // que internamente llama a Close();
}
}
}

Salu2 - Octavio


Respuesta Responder a este mensaje
#5 Diego Gonzalez
29/07/2003 - 23:03 | Informe spam
Hay alguna nota para hacer con respecto a eso que tiene que ver con el
compilador de C#.
Cuando se usa using, el compilador emite primero un cast hacia IDisposable y
llama a Dispose. Esto tiene una implicancia de performance de casi del 5%,
que puede ser importante si alguien quiere hacer algo que realmente funcione
bien rápido.

Si miran atentamente el IL de la sentencia using, se hace un casting y se
llama a Dispose. Esto ocurre porque se está haciendo una implementación
explícita del metodo Dispose de la siguiente forma:
void IDisposable.Dispose() { }
en lugar de hacer
public void Dispose() { }
Lo cual fuerza al compilado a tener que hacer el casting. Es un tema
interesante en caso que uno busque mucha performance, en particular si está
dispuesto a pagar la performance con complejidad en el código.

Saludos,
Diego González
Lagash Systems SA

"tristan" wrote in message
news:0a4401c355bd$1f1bee90$
Gracias por la puntualización, muy útil.

Por cierto solo añadir una curiosidad, según la
documentación, es desde Close() desde donde se llama a
Dispose() en lugar de lo contrario. Creo además que es la
recomendación general para todas las clases IDisposable
que tengan método Close().
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida