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; |
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. |
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. |
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 :) |
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! |
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!!! |
Gracias!!!! agradezco tus buenas intenciones!
|
La franja horaria es GMT +2. Ahora son las 00:39:06. |
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