2010-03-05 23 views
6

Tengo dos módulos diferentes que necesitan acceso a un único archivo (uno tendrá acceso ReadWrite - Otro solo lectura). El archivo se abre usando el siguiente código en uno de los módulos:FileStream: utilizado por otro error de proceso

FileStream fs1 = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.ReadWrite, FileShare.Read); 

problema Th es que el segundo módulo falla al intentar abrir el mismo archivo utilizando el siguiente código:

FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read); 

Do I necesita establecer algunos parámetros de seguridad adicionales aquí?

Respuesta

22

Por FileStream que sólo lee el archivo, es necesario establecer como

FileShare.ReadWrite

FileStream fs = new FileStream(@"D:\post.xml", FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 

de otra forma el FileStream original no sería capaz de escribir de nuevo a él ... es sólo una volea apuesta de ida y vuelta Entre las dos corrientes, asegúrese de devolver lo que el otro necesita

+0

+1: OK, funcionó pero no sé por qué. ¿El primer FileStream podrá guardar mientras el segundo está abierto? – A9S6

+0

Con una prueba rápida, pude escribir en la primera y luego cerrar la transmisión mientras que la otra estaba abierta y el estado de CanRead es verdadero ... así parece, sí – curtisk

0

necesita usar el filestreamname.Open(); y el filestreamname.close(); comando cuando se utilizan 2 flujos de archivos que leen/escriben en el mismo archivo, porque no puede leer y escribir en un archivo de forma asincrónica.

+2

-1: información completamente incorrecta. –

0

Al abrir la segunda FileStream, también es necesario especificar FileShare.Read, de lo contrario se intente abrirlo con acceso exclusivo, y fallará porque el archivo ya está abierto

+0

Lo intenté pero no funcionó: FileStream fs = new FileStream (@ "D: \ post.xml", FileMode.Open, FileAccess.Read, FileShare.Read); – A9S6

Cuestiones relacionadas