2009-02-02 23 views
7

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

+0

Sería informativo enumerar qué sistema operativo y lenguaje de programación está utilizando. – Andy

+0

+1 Andy. Arthur, por favor menciona el lenguaje de programación o sistema operativo en las etiquetas o en la pregunta. – Srikanth

Respuesta

29

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

+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

0

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.

0

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.

4

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.

Cuestiones relacionadas