Página 1 de 1

Detectar nuevo elemento en carpeta

Publicado: 17 Feb 2012, 13:14
por chekok
Hola!!!

Alguna sugerencia sobre como puedo saber si dentro de una carpeta dada se crea un nuevo fichero o carpeta dentro de ella. Ese nuevo elemento no lo crea el script autoit, el script lo que hace es iniciar la función X si existe una nueva carpeta que antes no estaba.

No se me ocurre nada de momento, he pensado en crear un array con el contenido de la carpeta inicial, luego volver a crear otro array de nuevo con el contenido y hacer una comparación entre ellos para así detectar si hay o no cambios, pero se me antoja un poco lío por si sabeis de alguna manera más simple de hacerlo.

Un saludo.

Re: Detectar nuevo elemento en carpeta

Publicado: 17 Feb 2012, 13:30
por BasicOs
Mas simple es calcular los megas o espacio que usa la carpeta, o/y listar el numero de elementos dentro de la carpeta.
y cuando cambie el espacio volver a listar esa carpeta a ver en que nombres de fichero ha cambiado, y si ha cambiado hacer otra vez el algoritmo que desees,
Salu22:)

Re: Detectar nuevo elemento en carpeta

Publicado: 17 Feb 2012, 13:36
por chekok
Gracias BasicOs, tan atento como siempre.

Voy a probar y subo el código.

Re: Detectar nuevo elemento en carpeta

Publicado: 21 Feb 2012, 10:04
por Ximorro
Me temo que con DirGetSize no te detecta una carpeta vacía, así que si no crean archivos con contenido dentro (y usas el modo recursivo de DirGetSize) no lo verás mirando el tamaño.

No veo una función directa que te diga el número de archivos dentro de una carpeta, así que me temo que te tocará hacerlo "a mano" con FileFindFirstFile/FileFindNextFile

Si no quieres hacer el código de cero puedes usar (o mirar y modificar) algo de la udf File.au3, por ejemplo _FileListToArray.
Si miras la carpeta muy agresivamente será mejor simplificar la función para no hundir CPU/disco.

Re: Detectar nuevo elemento en carpeta

Publicado: 21 Feb 2012, 21:09
por BasicOs
Con dirgetsize se puede conseguir adicionalmente el número de ficheros y dirs, usando un flag adicional ;) También se puede usar el command dir>mitxt.txt y leer lo pero no creo que lo necesites, a menos que quieras comparar si dos ficheros mitxtantes.txt mitxtactual.txt...
Es conveniente poner un sleep(1000) al menos para no saturar la cpu o sleep(500) para cada medio segundo de revisión, o menos.... depende para que
Salu22:)

Re: Detectar nuevo elemento en carpeta

Publicado: 22 Feb 2012, 09:06
por Ximorro
Touché! Cierto, el modo extendido. Sí, olvida lo que dije antes, con eso perfecto si es para saber si aparecen más carpetas.

Además de un bucle con un sleep, si el programa tiene que estar haciendo otras cosas puedes programar la tarea con las funciones Adlib. Yo también recomendaría un segundo, o como mucho medio.

Re: Detectar nuevo elemento en carpeta

Publicado: 22 Feb 2012, 23:25
por BasicOs
Ximorro: ;) Messi también a veces da en el poste!! :smt115 :smt017

Gracias por tu aporte, entre todos vamos optimizando, que 4 o 6 ojos ven más que dos, y cualquiera puede aportar, ;) , y todo es escribir hablar y compartir ideas, seguro que hay más maneras diferentes de hacerlo que no se nos han ocurrido, aún así todas funcionan... :smt023
Salu22.)

Re: Detectar nuevo elemento en carpeta

Publicado: 22 Feb 2012, 23:32
por arkcrew
Hola,

Creo que se podría hacer guardando el listado de los archivos anteriores y compararlo con el nuevo, además si se implementa algo más de código se podría hacer para listar los archivos que estaban antes y los que ahora no están o viceversa, e incluso se podría programar algo para que actualizase siempre esa carpeta con el contenido de otra.

Espero que esa idea no se haya comentado, sino no se me ocurre otra xD

Saludos!