Pregunta

Estoy tratando de usar un StreamReader para leer un archivo, pero siempre está en uso por otro proceso, así que obtengo este error:

  

El proceso no puede acceder al archivo   '\ arfjwknasgmed17 \ C $ \ FLAG   CONDITION \ CP-ARFJN-FLAG.XLS 'porque   está siendo utilizado por otro proceso.

¿Hay alguna forma de leer esto sin copiarlo? ¿O esa es mi única opción?

¿Fue útil?

Solución

Puede leer el archivo solo si el programa que abrió el archivo especificó primero los derechos de lectura compartida en ese archivo.

Si el archivo no tiene derechos de lectura compartida, no podrá copiarlo en primer lugar.

Es posible que no pueda acceder a un archivo si está especificando un derecho de uso compartido que está en conflicto con el derecho de uso compartido de un programa que ya tiene el archivo abierto. Por ejemplo, no puede otorgar acceso de escritura si el programa que ya lo tiene abierto no otorga acceso de escritura.

Si el programa que abrió el archivo en primer lugar es compatible con Volume Shadow Copy (VSS), también puede usar VSS para obtener acceso al archivo.

Existen controladores de software comerciales que le permiten acceder a dichos archivos, incluso cuando están en uso. Solía ??poder obtener Open File Manager de St-Bernards, y también puede usar File Access Manager (FAM) de VisionWorks Solutions Inc. Estos controladores suelen ser OEM para empresas de software de respaldo para su inclusión en sus productos.

VSS funciona diciéndole al programa que ya tiene el archivo abierto que a otro programa le gustaría leer del archivo. VSS luego hace una copia del archivo y le permite leer de esta copia. VSS no funciona para aplicaciones heredadas.

FAM funciona de manera transparente tanto para programas heredados como no heredados al especificar una 'lista permitida' de aplicaciones que pueden acceder a archivos exclusivamente abiertos y bloqueados. Solo los programas en esta lista tienen acceso permitido a estos archivos. Cuando se abre un archivo, pasa al modo de caché para que obtenga una copia del archivo tal como estaba cuando comenzó la 'copia de seguridad / apertura' del archivo. En este punto, el programa que abrió originalmente el archivo ve el archivo como realmente es, y el segundo programa en la lista permitida, ve el archivo como estaba cuando ocurrió la 'apertura / copia de seguridad' del archivo. Esto asegura la consistencia del archivo.

Otros consejos

pruebe el siguiente código.

FileStream fileStr = File.Open(<full file name>, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
fileStream = new StreamReader(fileStr);

Lo he probado en Windows XP. Si el archivo ya está abierto en modo de escritura por algún otro proceso & amp; no ha especificado derechos de uso compartido, aún podrá abrir el archivo en modo de lectura.

Descargo de responsabilidad: funciona, pero no estoy seguro de si debe usarlo en el código de producción. Todavía no puedo encontrar ninguna documentación formal que diga que debería funcionar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top