El problema típico es que el otro proceso tiene el archivo abierto para escritura. Todos los métodos de archivo estándar y los constructores de StreamReader abren el archivo con FileShare.Read. Eso no puede funcionar, eso niega el intercambio de escritura. No puede denegar la escritura, el otro proceso fue el primero y obtuvo acceso de escritura. Por lo tanto, se te denegará el acceso.
usted tiene que utilizar FileShare.ReadWrite, así:
var fs = new FileStream(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
using (var sr = new StreamReader(fs))
{
// etc...
}
Tenga en cuenta que usted todavía tiene un problema complicado, que está leyendo un archivo a medio escribir. El otro proceso vacía datos en el archivo en puntos aleatorios en el tiempo, puede leer solo media línea de texto. YMMV.
¿Desea abrir la transmisión en modo Lectura? ¿O desea configurar el atributo de archivo ReadOnly? –
Quiero abrirlo ReadOnly – xbonez
Tenga en cuenta que si otro proceso tiene el archivo abierto, ese proceso aún debe tener habilitado el uso compartido de lectura para que pueda leerlo. Si el otro proceso abrió el archivo con el intercambio denegado, incluso se podría evitar abrir el archivo como de solo lectura. Consulte la enumeración de FileShare (o el equivalente de Win32) para obtener más información. – itowlson