write visual propiedad declarar create c# filestream

c# - visual - System.IO.FileStream FileAccess vs FileShare



streamwriter c# (3)

FileAccess dice lo que vas a hacer con el archivo. Bastante fácil de entender, sabrás que leerás o escribirás.

FileShare es el más complicado ya que requiere que te pongas en el lugar de otro programador. Determina lo que puede hacer otro proceso si también tiene el archivo abierto. Dos procesos para acceder a un archivo pueden ser muy molestos, tendrá que razonar a través de los posibles modos de falla. El valor que elija está fuertemente correlacionado con el tipo de archivo y el acceso que desea. Desglosando por lo que vas a hacer:

FileAccess.Read

Nunca hay ningún problema si otro proceso también se lee desde el archivo. Así que FileShare.Read es la opción predeterminada.

Es posible que necesite FileShare.ReadWrite si otro proceso ya abrió el archivo para escribir. Ya obtuvo acceso de escritura, por lo que nunca podrá abrir el archivo solo con FileShare.Read, no puede negar la escritura, ya que ese otro proceso fue el primero, se le negará el acceso. Por lo general, esto solo es bueno para un archivo de texto, del tipo en el que puede estar seguro de que el otro proceso solo agrega texto al final del archivo. Un archivo de registro es el escenario muy común. Aún así es posiblemente complicado, importa exactamente cuando ese proceso limpia los cambios en el archivo. Puedes observar líneas de texto parcialmente escritas, ten cuidado con esto.

FileAccess.Write

No puede utilizar FileShare.Write o FileShare.ReadWrite. Dado que eso permitiría que dos procesos se escriban en el archivo al mismo tiempo, el contenido del archivo será una mezcla de resultados de ambos programas. Una posible solución es que estos procesos arbitren el acceso al archivo, asegurando que solo uno de ellos pueda acceder al archivo al mismo tiempo. Normalmente implementado por un mutex nombrado.

Puede usar FileShare. Lea si es un archivo de texto, el mismo escenario que describí anteriormente con el archivo de registro. La opción predeterminada de lo contrario debería ser FileShare.None

FileAcces.ReadWrite

No es tan común, solo se usa si escribes datos binarios y utilizas Seek (). No hay esperanza de que algún otro proceso pueda leer el archivo correctamente mientras lo hace, suponiendo que ellos mismos no arbitren el acceso, debe usar FileShare. Ninguno.

He buscado por todas partes, pero no puedo encontrar una respuesta a esta pregunta. Entiendo que FileAccess ocupa del acceso a los archivos en la máquina y FileShare se FileShare la parte compartida, pero no puedo encontrar una explicación de cómo se FileShare exactamente y cómo se afectan entre sí.

Por ejemplo, si tengo

using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite) )

¿Eso significa que los usuarios en la máquina solo pueden leer el archivo mientras que los usuarios que acceden a la carpeta de forma remota pueden leer y escribir en el archivo? Además, ¿cuál sería el impacto en el uso

using ( FileStream fs = new FileStream( pathName, FileMode.Open, FileAccess.Read ) )

¿Dónde no he especificado el FileShare?


FileShare no tiene nada que ver con las unidades compartidas a través de una red: indica cómo otros procesos pueden acceder al archivo.

Si el primer proceso abre el archivo con FileShare.Read , otros procesos pueden abrir el archivo con FileAccess.Read , pero otro proceso no puede abrir el archivo con FileAccess.Write en ese caso.


FileShare no tiene nada que ver con los archivos compartidos de Windows. Habla de compartir archivos en la misma máquina solamente. Especifica qué otros manejadores de archivos vendrán después de que puedas hacer lo máximo posible. Además, los identificadores existentes se comparan con él para decidir si puede abrir el archivo o no.

FileAccess especifica sus derechos de acceso.