2010-07-02 32 views
7

¿Hay alguna manera de determinar si un archivo está abierto por cualquier cosa incluidas las aplicaciones que no bloquean el archivo (como el bloc de notas).Determinar si un archivo está abierto

Necesito detectar cuando un archivo dado myfile.txt ya no está abierto en ninguna aplicación, incluido el bloc de notas, así que no puedo usar File.Open (...) con acceso exclusivo para probar ya que el archivo no tiene bloqueo .

+0

posible duplicado de [¿Cómo obtengo la lista de identificadores de archivos abiertos por proceso en C#?] (Http://stackoverflow.com/questions/177146/how-do-i-get-the-list-of- open-file-handles-por-proceso-en-c) –

+1

Esto no es un duplicado. El Bloc de notas no tiene un controlador de archivo abierto. –

Respuesta

7

No. Cuando el Bloc de notas ha abierto un archivo, ha leído el archivo completo en y luego lo cerró. Por lo tanto, no hay ningún rastro en el sistema operativo que vincule la memoria privada del Bloc de notas con el archivo en el disco.

Abrir el archivo exclusivamente no funcionará, porque el Bloc de notas no tiene el archivo abierto. La tabla de manejo del Bloc de notas no funcionará, porque el Bloc de notas no tiene el archivo abierto.

La única manera de detectar esto es escribir una DLL no administrada que se inyecta en cada proceso para escanear su memoria virtual, buscando el contenido exacto del archivo. No recomendado.

0

Debe llamar a File.Open (...) especificando sus banderas de acceso deseadas y comprobar el valor de retorno para determinar si el archivo se abre o si se deniega el acceso. Esta es la forma recomendada y segura de acceder a un archivo.

Cuestiones relacionadas