PDA

Ver la Versión Completa : Detectar creacion de carpeta nueva.


JuanErasmo
12-06-2007, 17:27:02
Buenos dias amigos.

Estoy intentando crear un porgramita que notifique, y guarde el nombre de las carpetas que son creadas, es decir, poder detectar el evento que se da, cuando se crea un carpeta nueva, sin necesidad de hacer iteraciones con todos los directorios,,,,,
Se produce algun evento o Msg, cuando se crea una carpeta nueva??

Gracias!

De que otra forma se puede hacer?

Muchisisimas gracias!

cHackAll
12-06-2007, 22:46:45
Utiliza la las funciones que dejé en éste (http://www.clubdelphi.com/foros/showthread.php?t=44031) hilo!

Suerte!

JuanErasmo
13-06-2007, 00:37:29
Hola, muchas gracias,
He leido sobre la funcion,
pero no manejo delphi, sino C++ Builder, ,,,
Algun ejemplo en Builder???
Gracias!

cHackAll
13-06-2007, 22:20:24
Ahhhh, haberlo dicho antes, no problem! bajate el zip de ésta (http://bcb-tutorial.c-plusplus.de/Thread/artikel7.html) página, si no te sirve en google (http://www.google.com.bo/search?hl=es&q=FindFirstChangeNotification+Builder&btnG=Buscar&meta=lr%3Dlang_es) encontrarás muchos ejemplillos de lo mismo... solo debes recordar el nombre de la API FindFirstChangeNotification y si sabes algo de Delphi pues usa como idea lo que deje anteriormente.

Suerte!

JuanErasmo
13-06-2007, 22:39:47
o ForMultipleObjects.

Hola amigos, estoy intentando saber el nombre del archivo que fue agregado sea directorio o file.
ya logre que me muestre un mensaje para cuando el usuario modifique la carpeta (agregue o quite files), peroooo ahora lo mas importante es conocer el nombre del nuveo archivo insertado!
Gracias amigos

cHackAll
13-06-2007, 22:55:25
Ese problema lo solucione en el hilo que deje como referencia al primer post del hilo, simplemente debes hacer una lista de los archivos y carpetas existentes... cuando ocurre una modificacion haces de nuevo el recorrido por la carpeta. Los archivos/carpetas que ya existan en la lista los borras, los que no los añades. así tendras la lista. Verifica un poco de lo que deje con anterioridad (http://www.clubdelphi.com/foros/showthread.php?t=44031), especificamente el manejo de la lista.

Suerte.

JuanErasmo
13-06-2007, 23:08:50
Muchas gracias!

Gracias por tu colaboracion!
pero tengo un problema grave,,,,
Manejo C++ Builder, y me da mucha dificultad traducir tu codigo,,,,

podrias ayudarme? o sera mucho pedir??
Muchas gracias, de veras lo necesito urgente....

cHackAll
14-06-2007, 01:44:52
...pero tengo un problema grave,,,,
Manejo C++ Builder, y me da mucha dificultad traducir tu codigo,,,,

Creo que ya me quedo claro con tu segundo post amigo!

...podrias ayudarme? o sera mucho pedir??...

Aunque me parece un poco agrasivo tu comentario, hare lo que pueda pues yo programo en Delphi :D y bueno al grano; encontre un foro (http://forums.devshed.com/delphi-programming-90/help-on-file-directory-management-c-builder-6t-180457.html) que tiene parte de lo que necesitas... y la otra que necesitas esta acá (http://www.ne.jp/asahi/protech/hiroaki/programing/cb.html). Yo se que no entenderas todo lo escrito en el foro, pero intenta comparar el código con el que yo hice en Delphi... las APIs son las mismas.

Ahora te explico un poco: es como si hicieras DIR, (te explico así pues es un idioma que estoy seguro ambos entenderemos), la lista de este dir la guardas en un TStrings que es un vector de cadenas. Hecho esto esperas a que el WaitForSingleObject se dispare con un cambio en el directorio, cuando ésto sucede vuelves a usar la API FindFirstFile, FindNextFile, etc... pero en ves de llenar los nombres en la lista, buscas los nombres, borras, los items que ya existan, y los que no los añades (en la misma lista claro).


var List: TStrings; // Es el vector de cadenas

var Handle: Cardinal; Index: Integer; FindData: TWin32FindData; // declaracion de variables
begin
List.Clear; // Limpio la lista
Handle := FindFirstFile(PChar(Path + '\*.*'), FindData); // Inicias el listado
repeat
if (FindData.cFileName <> '.') and (cFileName <> '..') then // Si el nombre encontrado no es '.' ni '..'
List.Add(FindData.cFileName); // Lo añado en la lista
until not FindNextFile(Handle, FindData); // repito hasta que la API FindNextFile me diga que ya no hay archivos
FindClose(Handle); // y cierro la busqueda
end;

Lo anterior crea la lista... lo otro no es muy diferente:


begin
Handle := FindFirstFile(PChar(Path + '\*.*'), FindData); // Inicias el listado
repeat
if (FindData.cFileName <> '.') and (cFileName <> '..') then // Si el nombre encontrado no es '.' ni '..'
begin
Index := List.IndexOf(FindData.cFileName); // a la variable Index le asigno la posicion en mi lista
if Index <> -1 then // cuando NO es -1, significa que existe en la lista, entonces
List.Delete(Index) // lo borro
else // caso contrario
List.Add(FindData.cFileName); // Lo agrego
end;
until not FindNextFile(Handle, FindData);
FindClose(Handle);
end;

Lo que hice es borrar los que ya existian, y añadir los nuevos... me quedan todos los cambios en la estructura del directorio que queremos ver.

Espero sea mas iluminador en este post, ademas las APIs se repiten y es muy parecido con el Delphi...

PD: Me gustaria que lo pruebes al Delphi!

Suerte

JuanErasmo
15-06-2007, 16:49:38
Muchas gracias!
lo intentare!