elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Trabajando con las ramas de git (tercera parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Averiguar si un fichero esta abierto
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Averiguar si un fichero esta abierto  (Leído 6,422 veces)
zeux_madr

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Averiguar si un fichero esta abierto
« en: 25 Febrero 2013, 13:42 pm »

Buenas, necesitaria saber como puedo averiguar, de un directorio en el cual tengo cientos de ficheros, si alguno de esos ficheros esta abierto por algun proceso del sistema operativo, en este caso windows, para de esa forma poder saber si puedo copiar ese fichero o no a otra carpeta.

Gracias


En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #1 en: 25 Febrero 2013, 13:52 pm »

No dices específicamente en que lenguaje necesitas hacerlo, así que supongo que es batch.
En la suite de Sysinternals tienes handle, con el cual puedes conseguir eso.

Saludos


En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
zeux_madr

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #2 en: 25 Febrero 2013, 14:05 pm »

Buenas, perdon, el lenguaje es batch, he usado handle, pero algo hare mal por que no me sale lo que esta abierto.

Ejemplo: handle "c:\prueba\"

Dentro de prueba tengo varios ficheros, uno se llama correo.txt.
Dicho fichero lo abri con el notepad++ y al ejecutarlo no se entera de que lo tengo abierto.
Lo estoy ejecutando bien?

saludos
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #3 en: 25 Febrero 2013, 14:13 pm »

Acabo de probar de ese modo y funciona bien :-\

Saludos
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
zeux_madr

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #4 en: 25 Febrero 2013, 14:16 pm »

a mi me dice no matching handles found, y lo tengo abierto, no lo entiendo.
En línea

Novlucker
Ninja y
Colaborador
***
Desconectado Desconectado

Mensajes: 10.683

Yo que tu lo pienso dos veces


Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #5 en: 25 Febrero 2013, 14:21 pm »

Es verdad!

Acabo de probar con un archivo en notepad++ y no lo muestra :huh:
En línea

Contribuye con la limpieza del foro, reporta los "casos perdidos" a un MOD XD
"Hay dos cosas infinitas: el Universo y la estupidez  humana. Y de la primera no estoy muy seguro."
Albert Einstein
zeux_madr

Desconectado Desconectado

Mensajes: 7


Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #6 en: 25 Febrero 2013, 14:23 pm »

es mas, si ademas lo borro estando abierto el fichero, me deja borrarlo, por lo que pierdo el contenido que en ese momento estuviera grabando en ese fichero, eso es lo que quiero evitar, que si el fichero esta abierto, y estoy escribiendo, evitar que pueda borrar ese fichero estando abierto.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: Averiguar si un fichero esta abierto
« Respuesta #7 en: 25 Febrero 2013, 16:50 pm »

es mas, si ademas lo borro estando abierto el fichero, me deja borrarlo, por lo que pierdo el contenido que en ese momento estuviera grabando en ese fichero, eso es lo que quiero evitar,

Estás equivocado.

No hay que preocuparse por eso en absoluto, el Notepad, Notepad++ y en general los editores de texto no protegen el archivo que has abierto porque no es necesario hacerlo, no es culpa de la aplicación de SysInternals, sinó de que los editores no modifican la protección de esos archivos... se visualiza una cópia OnTheFly del archivo entero, y en caso de guardarlo, si intentas eliminarlo mientras el archivo está siendo guardado, eso ya es muy distinto y ahí si verás como no puedes eliminarlo, y si has eliminado el archivo préviamente e intentas guardarlo, no ocurrirá ninguna catástrofe, el nuevo archivo se generará con el contenido del archivo que borraste y las modificaciones que le hayas hecho, en cualquier editor vaya.

Si quieres hacer mejores pruebas sobre los permisos, usa un archivo de video abierto por un reproductor (Un reproductor que no séa MediaPlayer Classic/MediaPlayer Classic Home Cinema, porque este tampoco protege el archivo que ejecutas y lo puedes eliminar del disco en cualquier momento mientras sigue la visualización...)

Igual que puedes eliminar un script mientras está en ejecución...

En fín todo eso depende del programa y de como hayan querido desarrollar el aspecto de la seguridad de los archivos abiertos.

No creo que puedas detectar con 100% de certeza si un archivo de TXT ha sido abierto,
Podrías usar WMIC para mostrar la línea de comandos con la que se ejecutaron todas las aplicaciones, al abrir un archivo de texto, estaría en esa línea de comandos, pero si abres otro archivo distinto desde el programa la línea de comandos no se actualizara.

Código:
WMIC Process get commandline /format:list

Así que mi consejo para asegurarte lo máximo posible en esas ocasiones como "archivos de texto" es que combines Handles + WMIC + CMDOW

Con CMDOW puedes obtener el título de la ventana de la aplicación, donde debe salir el nombre del archivo que está abierto en ese momento, pero claro, si en el editor de texto tienes multiples pestañas, en el TitleBar sólo mostrara el nombre del archivo de la pestaña que tengas abierto... por eso te aconsejo combinar y te digo que no lo puedes saber 100% con seguridad.
 
Citar
Código:
C:\>cmdow | find /I "test"
0x230440 1 2752 Res Ina Ena Vis sublime_ C:\Users\Administrador\Desktop\test 2.
0x470404 1 2596 Res Ina Ena Vis notepad  test.txt: Bloc de notas

PD: CMDOW y WMIC no serían necesarios si usases WMI, en cualquier otro lenguaje, pero no conseguirías mejores resultados.

EDITO: Quizás alguien más experimentado en procesos y handles encuentra otra solución más efectiva

Saludos.
« Última modificación: 25 Febrero 2013, 17:07 pm por EleKtro H@cker » En línea



Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
cerrar visor de imagenes si esta abierto
Programación Visual Basic
jocker 2 1,420 Último mensaje 13 Mayo 2006, 13:09 pm
por Kizar
Como identificar que el programa esta abierto?
Programación Visual Basic
IP3 3 3,113 Último mensaje 1 Diciembre 2006, 19:08 pm
por xDie
¿Qué fichero está abierto en la ventana activa?
.NET (C#, VB.NET, ASP)
mmob 0 2,066 Último mensaje 16 Octubre 2007, 14:30 pm
por mmob
Saber si un proceso esta abierto.
Scripting
Pony-Magic 2 4,579 Último mensaje 31 Diciembre 2008, 20:48 pm
por -Soldier-
El nuevo MySpace ya está abierto al público
Noticias
wolfbcn 1 1,917 Último mensaje 15 Enero 2013, 19:29 pm
por crazykenny
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines