Con el siguiente código de lectura de archivo:En C#, si 2 procesos están leyendo y escribiendo en el mismo archivo, ¿cuál es la mejor manera de evitar excepciones de bloqueo de procesos?
using (FileStream fileStream = new FileStream(fileName, FileMode.Open, FileAccess.Read, FileShare.None))
{
using (TextReader tr = new StreamReader(fileStream))
{
string fileContents = tr.ReadToEnd();
}
}
Y el siguiente código de escritura de archivo:
using (TextWriter tw = new StreamWriter(fileName))
{
tw.Write(fileContents);
tw.Close();
}
se observan los siguientes detalles de la excepción:
El proceso no tiene acceso al archivo 'c: \ temp \ myfile.txt' porque es que está siendo utilizado por otro proceso.
¿Cuál es la mejor manera de evitar esto? ¿El lector debe volver a intentar al recibir la excepción o hay alguna forma mejor?
Tenga en cuenta que el proceso del lector utiliza un FileSystemWatcher para saber cuándo ha cambiado el archivo.
También tenga en cuenta que, en este caso, soy no buscando alternativas para compartir cadenas entre los 2 procesos.
Pero en este caso, si entiendo el funcionamiento correctamente, ¿podría leer un archivo incompleto? –
Eso es cierto, sí. Ese siempre será el caso si permite que más de un consumidor acceda al archivo. La única manera de lograr esto y sincronizar es usar un archivo de bloqueo o atrapar la excepción de acceso e intentar nuevamente hasta que obtenga acceso exclusivo. –
Estoy un poco confundido porque esto parece contradecir la respuesta aceptada a esta pregunta: http://stackoverflow.com/questions/25097773/system-io-filestream-fileaccess-vs-fileshare porque indica que para FileAcces.ReadWrite debe usar FileShare.None. – user2481095