2009-09-07 15 views
29

He estado usando File.ReadAllText para capturar algunos csv, pero cada vez que olvido cerrar el archivo en Excel, la aplicación arroja una excepción porque no puede obtener acceso al archivo.La manera más fácil de leer el archivo de texto que está bloqueado por otra aplicación

(parece una locura para mí, me refiero a la READ en ReadAllText parece bastante claro)

Sé que hay File.Open con todas las campanas y silbatos, pero no es un método de 'intermedio', que doesn' ¿Implica jugar con buffers y arreglos de caracteres?

Sí, soy vago, por lo que me votan abajo, me acaba de dar la respuesta primero :)

Respuesta

45

Creo que lo que desea es la siguiente:

using (var fileStream = new FileStream("foo.bar", FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 
using (var textReader = new StreamReader(fileStream)) 
{ 
    var content = textReader.ReadToEnd(); 
} 

El FileAccess.Read parámetro es lo que es importante, para indicar que sólo desea leer el archivo. Por supuesto, incluso para hacer esto, el archivo debe haber sido abierto por Excel en el modo de lectura compartida (consulte la enumeración FileShare en .NET). No he probado, así que no puedo garantizar que Excel haga esto, aunque esperaría que lo haga.

+0

Gracias, ¿qué es lo más corto que puedo poner entre {} para sacar toda la cadena del archivo? (Dije que era flojo) – Benjol

+0

@Benjol: No hay problema. Actualizado con el código para leer todo el texto. – Noldorin

+0

@Noldorin, gracias. Ese era el eslabón perdido. Miré todos los métodos disponibles en FileStream, no pude entender. – Benjol

0

Si desea especificar banderas intercambio de archivos con el fin de abrir un archivo que está en uso, se' re atascado con File.Open().

+1

Excel está abriendo el archivo, por lo que el OP no puede controlarlo. Solo puede esperar que Excel lo abra en modo de lectura compartida y lo abra solo él mismo. – Noldorin

Cuestiones relacionadas