Quiero escribir/eliminar un archivo, pero a veces me sale un fallo si el archivo está siendo utilizado por otro programa. ¿Cómo verifico si otro proceso abre el archivo o puedo abrirlo para escribir?Delphi: compruebe si el archivo está en uso
Respuesta
El problema es que, entre el momento en que comprueba si puede obtener acceso exclusivo y abrir el archivo, otra cosa obtiene acceso exclusivo al archivo, y de todos modos obtiene la excepción.
La única forma infalible para ver si puede obtener un bloqueo exclusivo en un archivo es intentar obtener un bloqueo exclusivo en el archivo, si lo obtiene, lo tiene.
Si no es así, detectar la excepción, y, o bien
- hacer algo más
- Espera un rato y vuelve a intentarlo
Es una de las situaciones de la vida en las que es mejor pedir perdón que permiso :)
+1, y me encantaría votar esto más a menudo. Todo este "verificar algo, luego actuar en consecuencia" parece ser un remanente del antiguo DOS (u otro tipo de tarea), o simplemente que a los programadores les gusta pensar que su programa está solo en una computadora ... – mghie
No estoy seguro del lenguaje de programación que desea verificar si puede escribir en un archivo. En Java, java.io.File.canWrite() puede hacer el trabajo por usted.
general:
En OS UNIX, puede utilizar el comando lsof.
Si quiere ver qué programa tiene un control para su archivo, use el Process Monitor (descargue desde MicroSoft).
Esta herramienta tiene una interfaz de línea de comandos, por lo que puede usar la interfaz de scripting de su idioma (por ejemplo java.lang.Process
) para ejecutar la herramienta y mostrar un mensaje de error útil.
IsFileInUse como se indica en http://delphi.about.com/cs/adptips1999/a/bltip0999_3.htm
Esa es una versión horrible de eso. Mucho mejor es el de Johnjces en: http://www.experts-exchange.com/Programming/Languages/Pascal/Delphi/Q_22887573.html – lkessler
Hay una nueva forma de obtener el origen del archivo de bloqueo para Vista y hasta aquí: http://www.remkoweijnen.nl/blog/2011/01/03/cannot-access-files-but-need-the-origin/
modo usuario: La mejor manera de escribir en un archivo bloqueado es preguntar al usuario para cerrarla en el otro proceso . En procesos por lotes, debe ignorar dicho archivo y registrar el problema. Proporcionar el nombre del otro proceso es una muy buena manera de encontrar una solución para el usuario.
- 1. Compruebe si el archivo ya está abierto
- 2. Compruebe si un archivo está abierto
- 3. Delphi: compruebe si la memoria se está liberando "a tiempo"
- 4. Compruebe si el archivo existe en ksh
- 5. compruebe si el archivo de entrada archivado está vacío jquery
- 6. Compruebe si el carácter es una letra en Delphi (Unicode)
- 7. compruebe si el objeto se crea o no en delphi
- 8. compruebe si NSNumber está vacío
- 9. compruebe si el archivo existe en php
- 10. compruebe si un archivo está abierto en Python
- 11. Compruebe si un archivo está bloqueado en Java
- 12. Compruebe si "exec" está deshabilitado
- 13. Compruebe si el usuario está actualmente en línea (en vivo)
- 14. Compruebe si el comando está disponible en el archivo por lotes
- 15. Python: compruebe si un archivo está vacío o no
- 16. C compruebe si el archivo existe
- 17. Comprobación de PHP si el archivo está en uso
- 18. Compruebe si el tiempo frontal está habilitado en el dispositivo
- 19. Compruebe si la cadena está vacía
- 20. Compruebe si existe un archivo en el servidor
- 21. Compruebe si un usuario está desconectado en el dispositivo
- 22. Compruebe si la dirección IP está en el rango privado
- 23. Compruebe si el socket está escuchando en C
- 24. Compruebe si jQuery está incluido en el encabezado (Joomla)
- 25. Compruebe si el objeto está en una lista de objetos
- 26. Django compruebe si el campo está en blanco?
- 27. Compruebe si el espacio está en una cadena
- 28. Compruebe si el iPad está en modo silencioso
- 29. Compruebe si el sistema de archivos Android está encriptado
- 30. WP7 compruebe si Internet está disponible
Sería informativo enumerar qué sistema operativo y lenguaje de programación está utilizando. – Andy
+1 Andy. Arthur, por favor menciona el lenguaje de programación o sistema operativo en las etiquetas o en la pregunta. – Srikanth