Saber si un archivo está en uso

17/11/2008 - 23:56 por Darhas | Informe spam
Hola a todos

¿¿¿Como se puede saber si un archivo está en uso????

Y si lo está ¿¿como se puede quitar el atributo de que está en uso??

Preguntas similare

Leer las respuestas

#1 Alberto Poblacion
18/11/2008 - 07:48 | Informe spam
"Darhas" wrote in message
news:
¿¿¿Como se puede saber si un archivo está en uso????



He visto esta pregunta más de una vez en los foros de .Net, sin que se
haya recibido ninguna respuesta satisfactoria, nada más que la de "intenta
abrirlo con un try...catch e intercepta el error que te da si está en uso".
Puede que haya una solución más elegante llamando a las APIs de Windows,
pero con código de .Net hasta ahora no he visto que nadie haya dado una
respuesta mejor.

Y si lo está ¿¿como se puede quitar el atributo de que está en uso??



Lamentablemente no es un atributo del archivo, sino que el control de
"está en uso" lo lleva internamente el Kernel de Windows dentro de sus
variables internas en memoria. Para quitarlo habría que reiniciar Windows, o
matar el proceso que esté usando el archivo.
Respuesta Responder a este mensaje
#2 RFOG
18/11/2008 - 10:27 | Informe spam
On Tue, 18 Nov 2008 07:48:57 +0100, Alberto Poblacion
wrote:

"Darhas" wrote in message
news:
¿¿¿Como se puede saber si un archivo está en uso????



He visto esta pregunta más de una vez en los foros de .Net, sin que
se haya recibido ninguna respuesta satisfactoria, nada más que la de
"intenta abrirlo con un try...catch e intercepta el error que te da si
está en uso". Puede que haya una solución más elegante llamando a las
APIs de Windows, pero con código de .Net hasta ahora no he visto que
nadie haya dado una respuesta mejor.




Por lo que he visto por ahí, no existe nada en Win32 para eso y la forma
recomendada es esa: intentar abrir el fichero con diferentes modos para
ver el tipo de bloqueo...

Y si lo está ¿¿como se puede quitar el atributo de que está en uso??



Lamentablemente no es un atributo del archivo, sino que el control
de "está en uso" lo lleva internamente el Kernel de Windows dentro de
sus variables internas en memoria. Para quitarlo habría que reiniciar
Windows, o matar el proceso que esté usando el archivo.



A veces matar el proceso tampoco ayuda, ya que si el bloqueo se ha
realizado ex-profeso con LockFile() o LockFileEx() el bloqueo continua
estando presente de forma global...

Ahora bien, existe un agujero (o eso creo) para intentar forzar un
desbloqueo... El truco estaría en abrir el fichero con permisos de
"sistema" a través de la estructura LPSECURITY_ATTRIBUTES que la mayoría
de funciones Win32 llevan como parámetro. Otra cosa sería que un proceso
normal pudiera actuar con ese tipo de permisos, aunque supongo que es
posible, ya que, por ejemplo, aquí, yo hago algo parecido:
http://geeks.ms/blogs/rfog/archive/...-net.aspx.

Pero el tema de los atributos de seguridad es algo que tengo pendiente de
estudiar a fondo, ya que por ejemplo, la forma de ajustarlos del ejemplo
de arriba ha sido copiada de la MSDN...

Aunque supongo que la opción que usan los programas "profesionales" que
hacen esas tareas de desbloquear ficheros y todo eso será la de insertar
un driver en el núcleo que lo haga trasteando las estructuras internas del
mismo y que permita la comunicación con la parte cliente...

De todos modos, toda esta parrafada no deja de estar a la altura de la
p*ja mental, son simplemente teorías mías que tienen la validez que tienen.
Microsoft Visual C++ MVP
==Mi blog sobre programación: http://geeks.ms/blogs/rfog
Momentos Leves: http://momentosleves.blogspot.com/
Cosas mías: http://rfog.blogsome.com/
Libros, ciencia ficción y programación
Un sistema escolar que no tenga a los padres como cimiento es igual a una
cubeta con un agujero en el fondo.
Respuesta Responder a este mensaje
#3 Jose TH
18/11/2008 - 14:33 | Informe spam
¿¿¿Como se puede saber si un archivo está en uso????



como ya te han dicho quizas tratar de abrirlo con un Try Catch.

Y si lo está ¿¿como se puede quitar el atributo de que está en uso??



Pues mandandolo a cerrar :)

No entiendo bien lo que quieres y tal vez te refieras como "archivos" a
tablas de la base de datos ? o a la base de datos misma?

Si puedes explica mejor.
Respuesta Responder a este mensaje
#4 xcal
18/11/2008 - 17:22 | Informe spam
hola Alberto,

"Alberto Poblacion"
escribió en el mensaje news:e$uD$
"Darhas" wrote in message
news:
¿¿¿Como se puede saber si un archivo está en uso????



He visto esta pregunta más de una vez en los foros de .Net, sin que se
haya recibido ninguna respuesta satisfactoria, nada más que la de "intenta
abrirlo con un try...catch e intercepta el error que te da si está en
uso".



puede ser que esta solucion ya sea completa.

Puede que haya una solución más elegante llamando a las APIs de Windows,
pero con código de .Net hasta ahora no he visto que nadie haya dado una
respuesta mejor.



podria ser usando GetLastError, no recuerdo otra,
nunca use esta funcion, asi que no digo nada :)

Me parece que lo indicado es ver que da la experiencia
de usar estas 2 formas.

Mi curiosidad es que tan posible es detectar que proceso
usa el archivo.

saludos, Carlos.
Respuesta Responder a este mensaje
#5 Fernando A. Gómez F.
18/11/2008 - 22:52 | Informe spam
Alberto Poblacion wrote:
"Darhas" wrote in message
news:
¿¿¿Como se puede saber si un archivo está en uso????



He visto esta pregunta más de una vez en los foros de .Net, sin que
se haya recibido ninguna respuesta satisfactoria, nada más que la de
"intenta abrirlo con un try...catch e intercepta el error que te da si
está en uso". Puede que haya una solución más elegante llamando a las
APIs de Windows, pero con código de .Net hasta ahora no he visto que
nadie haya dado una respuesta mejor.




Pues P/Invokeando a CreateFile con acceso exclusivo y revisando que el
handle regresado sea válido, pero pues es lo mismo que se hace con .NET,
solo que ésta lanza excepciones.

[SNIP]

Saludos.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida