verificar validar usado una siendo saber ocupado existe example esta directorio como carpeta archivo abierto c# .net file exception file-access

usado - validar si un archivo esta abierto c#



¿Verifica si un archivo está en uso sin intentar capturar? (4)

¿Hay alguna manera de verificar si un archivo está en uso o no abierto por otro proceso sin intentar abrirlo y capturar una excepción? ¿No hay un método de servicio para probar tal cosa?


¿Puedo probar si un archivo se puede abrir sin intentar abrirlo?

El .NET Framework, al igual que la API de Windows debajo, no proporciona tal funcionalidad. Si desea saber si se puede abrir o no un archivo, se espera que intente abrirlo y verificar que no se haya producido un error.


Incluso si lo hubiera, no le serviría de mucho ya que aún tendría que atrapar la excepción para manejar la condición de carrera en la que el archivo no estuvo disponible entre su cheque inicial y su intento real de abrirlo / acceder a él.

No puedo pensar en ninguna ventaja convincente para un control defensivo preliminar. Simplemente da como resultado una duplicación de código innecesaria.

Si existiera tal función IsFileAccessible , probablemente se implementaría como un bloque try / catch gigante que intentó abrir el archivo, detectó fallas y devolvió el resultado.



Una forma interesante de evitar la captura de try (pero implica un intento de abrir) es las funciones LockFile () o CreateFile () :

HANDLE WINAPI CreateFile (...)

Si la función tiene éxito, el valor de retorno es un identificador abierto para el archivo, dispositivo, canalización o ranura de correo especificados.

Si la función falla, el valor de retorno es INVALID_HANDLE_VALUE. Para obtener información extendida sobre el error, llame a GetLastError .

BOOL WINAPI LockFile (...)

Si la función tiene éxito, el valor de retorno es distinto de cero (VERDADERO).

Si la función falla, el valor de retorno es cero (FALSO). Para obtener información extendida sobre el error, llame a GetLastError .

Esto bloquea el archivo especificado para acceso exclusivo por el proceso de llamada, y en el error escribe información de error en el último error del subproceso, que se puede recuperar utilizando la función GetLastError .

Todavía sería posible pensar que entre el unlockFile y OpenFile otro proceso podría bloquear el archivo, pero es posible minimizar este período manteniendo el archivo bloqueado justo en el momento en que debe abrirse.