Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > API de Windows
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-11-2006
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
listar archivos jpg dentro de una carpeta con subcarpetas

hola amigos...
Estoy desarrollando una aplicacion que basado en una carpeta, debo obtener el contenido de todo lo que hay dentro de ella, subcarpetas, archivos....
lo estoy intentando asi
Código:
DIR *dir;
        struct dirent *ent;
        if ((dir = opendir(Directorio.c_str())) == NULL){
                ShowMessage("ERROR al abrir el directorio: "+Directorio);
        }else {
                int bmps=0,avis=0,docs=0,edad=0,edad_file=0;
        while ((ent = readdir(dir)) != NULL) {
                nombre_file=ent->d_name;
                extension=ExtractFileExt(nombre_file);
                edad_file=FileAge(Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file);
         if(edad<edad_file) edad=edad_file;
                if(nombre_file!="." && nombre_file!="..") {
                        if(DirectoryExists(Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file)){
                               Path=Directorio;
                               LMDMemo1->Lines->Add(nombre_file + "  Dir");
                               direc++;
                             //  Directorio = (Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file);
                             //  carpetas[direc] = Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file;
                            //   Directorio = (Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file);
                        }
                        else if(FileExists(Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file)){
                      //  else{
                              LMDMemo1->Lines->Add(nombre_file + "  Archivo");
                              files++;
                             // Directorio = Path;
                        }
                    /*    if (extension==".jpg" || extension==".jpg") {
                                bmps++;
                        }else if (extension==".avi" || extension==".AVI") {
                                avis++;
                        }else if (extension==".bmp" || extension==".bmp") {
                                docs++;
                        }else if(DirectoryExists(Directorio+"<A href="file://\\"+nombre_file">\\"+nombre_file)) {
                                 LMDMemo1->Lines->Add(nombre_file + "  Dir");
                                 Directorio = Directorio +"\\"+ nombre_file;
                               //  LMDSpeedButton2->Click();
                         }else{
                                 LMDMemo1->Lines->Add(nombre_file);
                         }
                      */
         }
      }
      delete dir;
      }
el problema es que asi solo me arroja el contenido de la carpeta,...no de los subdirectorios que tiene lo que necesito es como un buscador de archivos para poderlos manipular luego...........gracias!!!
Responder Con Cita
  #2  
Antiguo 24-11-2006
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Bueno, me parece que lo que necesitas (algo así necesitó yo hace un tiempo) es que el método se llame a sí mismo cada vez que se encuentre con una carpeta. Me eplico:
1º Llamas al método, con un directorio inicial (p.e. "C:\Archivos de programa\"
2º El método va analizando todo lo que hay (carpetas y archivos). Entonces: si encuentra un archivo, que lo procese. Si encuetra una carpeta, que se llame a sí mismo con ese nuevo directorio (p.e. "C:\Archivos de programa\UnProgramaInstalado") y así sucesivamente hasta que acabe.

Te recomiendo que coloques una barra de progreso o un mensaje avisando, porque a veces puede ser un proceso lento (si buscas en directorios con mucho contenido).

Buscaré ese código que hice (en Delphi) y lo pondré aquí un día de estos.

Saludos.
Responder Con Cita
  #3  
Antiguo 25-11-2006
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
Wink algo parecido!!!

es posible que para buscar los archivos de una carpeta y los archivos de las subcarpetas, la siguiente función que te muestro te sea de gran utilidad, lo que la he desarrollado en Delphi, si tienes algún problema para traducirla a C te puedo ayudar...

procedure SearchFiles(Path: string; vList: TStringList; all: boolean);
var
p, fn: string;
fs: TSearchRec;
attr: Integer;
begin
if trim(ExtractFileName(path)) = '' then fn := '*.*' else fn := trim(ExtractFileName(path));
p := ExtractFilePath(path);
{Buscamos los ficheros}
attr := faArchive;
if FindFirst(p + fn ,attr, fs) = 0 then
vList.Add( p + fs.Name);
while FindNext(fs) =0 do
vList.Add( p + fs.Name);
{Buscamos las carpetas}
attr := faDirectory;
if FindFirst(p + '\*..' ,attr, fs) = 0 then
if (fs.Name <> '.') and (fs.Name <> '..') and (all) then
SearchFiles(p + fs.Name + '\*.*', vlist, all);
while FindNext(fs) =0 do
if (fs.Name <> '.') and (fs.Name <> '..') and (all) then
SearchFiles(p + fs.Name + '\*.*', vList, all);
end;


un ejemplo de llamada a la función
...
var
x: TStringList;
begin
x := TStringList.Create;
SearchFiles('C:\*.*', x, CheckBox1.Checked);
Memo1.Lines.Clear;
Memo1.Lines.Add(x.Text);
end;
...
/////////////////////-----

para obtener algunos datos de los ficheros, desarrollé la siguiente, digo, si te hace falta:

type TFDEspec = record
Fecha, Hora: string;
end;
type TFileDates = record
dCreation: TFDEspec;
dLastAccessTime: TFDEspec;
dLastWrite: TFDEspec;
end;
function GetFileDates(pFN: TFileName): TFileDates;
var
vFoundData: _WIN32_FIND_DATA;
c_SysTime, at_SysTime, lw_SysTime: TSystemTime;
begin
{Buscando el archivo y obteniendo sus datos}
FindFirstFile(pChar(pFN), vFoundData);
{Convirtiendo los datos a datos del sistem}
FileTimeToSystemTime(vFoundData.ftCreationTime, c_SysTime);
FileTimeToSystemTime(vFoundData.ftLastAccessTime, at_SysTime);
FileTimeToSystemTime(vFoundData.ftLastWriteTime, lw_SysTime);
{Elaborando los resultados}
{Creaci
ón}
Result.dCreation.Fecha := IntToStr(c_SysTime.wDay) + '/' + IntToStr(c_SysTime.wMonth) + '/' + IntToStr(c_SysTime.wYear);
Result.dCreation.Hora := IntToStr(c_SysTime.wHour) + ':' + IntToStr(c_SysTime.wMinute) + ':' +IntToStr(c_SysTime.wSecond) + ':' +IntToStr(c_SysTime.wMilliseconds);
{Último acceso}
Result.dLastAccessTime.Fecha := IntToStr(at_SysTime.wDay) + '/' + IntToStr(at_SysTime.wMonth) + '/' + IntToStr(at_SysTime.wYear);
Result.dLastAccessTime.Hora := IntToStr(at_SysTime.wHour) + ':' + IntToStr(at_SysTime.wMinute) + ':' +IntToStr(at_SysTime.wSecond) + ':' +IntToStr(at_SysTime.wMilliseconds);
{Última escritura}
Result.dLastWrite.Fecha := IntToStr(lw_SysTime.wDay) + '/' + IntToStr(lw_SysTime.wMonth) + '/' + IntToStr(lw_SysTime.wYear);
Result.dLastWrite.Hora := IntToStr(lw_SysTime.wHour) + ':' + IntToStr(lw_SysTime.wMinute) + ':' +IntToStr(lw_SysTime.wSecond) + ':' +IntToStr(lw_SysTime.wMilliseconds);
end;

espero que de algo te sirva!!! salu2.
Responder Con Cita
  #4  
Antiguo 25-11-2006
Avatar de yusnerqui
yusnerqui yusnerqui is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuba
Posts: 679
Poder: 21
yusnerqui Va por buen camino
Hola aeff, te recomiento uses las etiquetas VB para hacer más legible tú código, fíjate que ya tienes 41 mensajes, o sea, que estás bastante crecidito para dejar de usarlas.

Saludos Yusnerqui
__________________
Lo importante no es llegar primero, sino saber llegar.

Para que puedas llegar mejor lee la Guia de Estilo

Responder Con Cita
  #5  
Antiguo 28-11-2006
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Si me puedes ayudar...

Hola!!...
Creo que si neceisto ayuda para pasar esa funcion a Builder C++....
no tengo mucha experiencia, pero tengo muchas ganas de aprender!
Gracias!
Responder Con Cita
  #6  
Antiguo 06-12-2006
Avatar de aeff
aeff aeff is offline
Miembro
 
Registrado: oct 2006
Ubicación: Cuba, Guantánamo
Posts: 348
Poder: 18
aeff Va camino a la fama
Talking respondiendo a última hora...

disculpa la demora, es que estaba de viaje... ahora es que venga a sentarme en la PC... y te voy a mandar la función de buscar los archivos implementada en C,

void SearchFiles(AnsiString Path, TStringList &vList, bool iFolders, bool all)
{
AnsiString p, fn;
int attr;
TSearchRec fs;
if (Trim(ExtractFileName(Path)) == "*.*") fn = "*.*"; else fn = Trim(ExtractFileName(Path));
p = ExtractFilePath(Path);
/*Buscamos los ficheros*/
attr = faArchive;
if (FindFirst(p + fn, attr, fs) == 0)
vList.Add(p + fs.Name);
while (FindNext(fs) == 0)
vList.Add(p + fs.Name);
/*Buscamos las carpetas, si se ha especificado*/
if (iFolders)
{
attr = faDirectory;
if (FindFirst(p + "\*..", attr, fs) == 0)
{
if (!all) vList.Add(p + fs.Name);
if ((fs.Name != ".") && (fs.Name != "..") && (all))
SearchFiles(p + fs.Name, vList, iFolders, all);
}
while (FindNext(fs) == 0)
{
if (!all) vList.Add(p + fs.Name);
if ((fs.Name != ".") && (fs.Name != "..") && (all))
SearchFiles(p + fs.Name + "\\" + fn, vList, iFolders, all);
}
}
FindClose(fs);
}

ahora, un ejemplo de llamada en un evento cualquiera:

TStringList *vLista = new TStringList();
SearchFiles("C:\\UsrMan\\*.*", *vLista, true, false);
Memo1->Text = vLista->Text;

espero que te sirva de algo aunque sea un poco demorada mi respuesta,

salu2!!!
Responder Con Cita
  #7  
Antiguo 06-12-2006
JuanErasmo JuanErasmo is offline
Miembro
 
Registrado: ago 2005
Posts: 544
Poder: 19
JuanErasmo Va por buen camino
Gracias!!!! agradezco tus buenas intenciones!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Listar archivos de directorio a travez de FTP ilichhernandez Internet 6 22-09-2006 01:03:14
Listar una carpeta [Gunman] API de Windows 4 03-01-2006 16:25:43
adjuntar el archivo que esta dentro una carpeta kinteam1 Internet 1 11-10-2005 22:32:01
Listar archivos d 1a URL y descargarlos Descendents Internet 0 06-11-2003 17:29:41
Listar ficheros dentro de un arbol olaya API de Windows 2 11-08-2003 19:44:15


La franja horaria es GMT +2. Ahora son las 19:31:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi