¿Hay alguna forma de determinar si un archivo ya está abierto o no?Compruebe si un archivo está abierto
Respuesta
protected virtual bool IsFileinUse(FileInfo file)
{
FileStream stream = null;
try
{
stream = file.Open(FileMode.Open, FileAccess.ReadWrite, FileShare.None);
}
catch (IOException)
{
//the file is unavailable because it is:
//still being written to
//or being processed by another thread
//or does not exist (has already been processed)
return true;
}
finally
{
if (stream != null)
stream.Close();
}
return false;
}
Si el proceso no tiene acceso de escritura al archivo, producirá un resultado engañoso (el abierto fallará, pero no necesariamente porque existe un identificador). Abrir para el acceso de lectura sería menos propenso a errores. – hemp
Es sorprendente que la mayoría de los idiomas no tienen un método para probar el archivo está abierto. Solíamos usar el mismo tipo de método en C++ en OS/2. es decir, intente abrir el archivo exclusivo. Funciona bastante bien, pero nunca pensé que fuera elegante. – Matt
No es una función de idioma, es una función de sistema operativo. Simplemente no existe una API simple (en Windows) para consultar esa información. Es posible obtenerlo, pero es de bajo nivel y hay muchos parámetros que deberían especificarse para saber qué se entiende por "abierto". – hemp
Como @pranay rana, pero hay que asegurarse de que cerramos nuestro identificador de archivo:
public bool IsFileInUse(string path)
{
if (string.IsNullOrEmpty(path))
throw new ArgumentException("'path' cannot be null or empty.", "path");
try {
using (var stream = new FileStream(path, FileMode.Open, FileAccess.Read)) { }
} catch (IOException) {
return true;
}
return false;
}
Igual que @pranay rana, probé este método, pero no detecta cuando el archivo está abierto en el Bloc de notas . – James
Si quiere decir que usted quiere comprobar si un archivo está abierto antes de intentar abrirlo , entonces no. (Al menos no sin pasar a bajo nivel y examinar todos los identificadores de archivos que están abiertos en el sistema.)
Además, la información sería antigua cuando la obtenga. Incluso si la prueba devuelve que el archivo no está abierto, podría haberse abierto antes de que tenga la oportunidad de usar el valor de retorno.
Por lo tanto, la forma correcta de manejar la situación es intentar abrir el archivo y manejar cualquier error que pueda ocurrir.
De acuerdo. Crearía una clase designada que envuelva la lógica de archivo abierto o al menos la prueba (IsFileAvailable). Esto le permitirá colocar la administración de excepciones con una clase específicamente responsable y hacerla reutilizable. Incluso puede aplicar lógica adicional, como probar el tamaño del archivo para ver si el archivo se está escribiendo en etc. para dar una respuesta más detallada. También hará que su código de consumo sea mucho más limpio.
- 1. Compruebe si el archivo ya está abierto
- 2. Compruebe si un puerto está abierto
- 3. compruebe si un archivo está abierto en Python
- 4. Ruby: compruebe si hay un puerto abierto
- 5. Determinar si un archivo está abierto
- 6. Python: compruebe si un archivo está vacío o no
- 7. Compruebe si un archivo está bloqueado en Java
- 8. ¿Cómo verifica si un archivo está abierto usando Perl?
- 9. AS3: compruebe si un diccionario está vacío
- 10. compruebe si NSNumber está vacío
- 11. Compruebe si se escanea un archivo PDF
- 12. Compruebe si "exec" está deshabilitado
- 13. Compruebe si se ha eliminado un archivo abierto después de abrirlo en python
- 14. C# compruebe si un puerto COM (en serie) ya está abierto
- 15. Delphi: compruebe si el archivo está en uso
- 16. compruebe si un archivo es ejecutable
- 17. compruebe si el archivo de entrada archivado está vacío jquery
- 18. Verificar si datepicker está abierto
- 19. Compruebe si la cadena está vacía
- 20. Detectando si el diálogo de entrada de archivo está abierto
- 21. Determine si se ha modificado un archivo abierto en C
- 22. Compruebe si la consola está presente
- 23. Compruebe si un directorio está vacío usando C en Linux
- 24. ¿Cómo puedo verificar si un filehandle está abierto en Perl?
- 25. Compruebe si una matriz está vacía
- 26. compruebe si la 1ª opción está seleccionada
- 27. OSX: compruebe si la pantalla está bloqueada
- 28. Compruebe si OpenCV está compilado con TBB
- 29. WP7 compruebe si Internet está disponible
- 30. Compruebe si $ _POST-value está vacío
Por favor, ofrece más detalles. ¿Ya está abierto por su proceso u otro proceso? ¿Período abierto, o simplemente abierto con acceso de escritura? ¿Qué hay de compartir? etc. Esta pregunta es demasiado vaga. – hemp