Usuario: anónimo

Usuarios en línea: 1
Invitados: 1

FAQ

Mensaje

2052m
Re[2]: archivos
C(Salvador Pozo) 2005-12-23 06:38:51  H

Estimado Darío,

Con fecha miércoles, 21 de diciembre de 2005, 23:15:44, escribió:

Hola:

No sabía que eras tu quien escribía con el nombre de LOR SFX, :-)

TD>  Si VC++ Win98

Bien, ya que programas para Windows, la solución pasa por usar el API.

Existen varias funciones para listar archivos y carpetas, una de ellas

la mencioné en un mensaje anterior, como una forma de incializar un

list box.

Existen otras funciones del API para listar archivos. Acudo de nuevo a

un mensaje anterior de esta lista de correo. (Corto y pego ;-)

----

Para esta tarea se usan tres funciones conjuntamente:

HANDLE FindFirstFile(

    LPCTSTR lpFileName, // pointer to name of file to search for

    LPWIN32_FIND_DATA lpFindFileData    // pointer to returned information

   );

El primer parámetro es el nombre del fichero a buscar. Puede contener

comodines y el camino completo:

"c:\\Dev-Cpp\\include\\*.h"

"c:\\autoexec.bat"

etc.

El segundo parámetro es un puntero a una estructura WIN32_FIND_DATA,

que es de salida y se usa para ver las características del fichero

encontrado,

El valor de retorno es un manipulador que se usa como entrada en las

siguientes funciones.

BOOL FindNextFile(

    HANDLE hFindFile,   // handle to search

    LPWIN32_FIND_DATA lpFindFileData    // pointer to structure for data on found file

   );

El primer parámetro es el manipulador devuelto por la función

anterior.

El segundo es igual al segundo parámetro de la función anterior.

BOOL FindClose(

    HANDLE hFindFile    // file search handle

   );

Cierra la operación de búsqueda, el parámetro es el devuelto por la

primera función.

La estructura WIN32_FIND_DATA tiene los siguientes campos:

typedef struct _WIN32_FIND_DATA { // wfd

    DWORD dwFileAttributes;

    FILETIME ftCreationTime;

    FILETIME ftLastAccessTime;

    FILETIME ftLastWriteTime;

    DWORD    nFileSizeHigh;

    DWORD    nFileSizeLow;

    DWORD    dwReserved0;

    DWORD    dwReserved1;

    TCHAR    cFileName[ MAX_PATH ];

    TCHAR    cAlternateFileName[ 14 ];

} WIN32_FIND_DATA;

Un ejemplo sencillo de cómo usar estas funciones puede ser:

----8<------

#include <windows.h>

#include <cstdlib>

#include <iostream>

using namespace std;

int main(int argc, char *argv[])

{

   HANDLE busqueda;

   WIN32_FIND_DATA wfd;

   busqueda = FindFirstFile("C:\\*.*", &wfd);

   if(busqueda != INVALID_HANDLE_VALUE) {

       do {

          cout << wfd.cFileName;

          if (wfd.dwFileAttributes &= FILE_ATTRIBUTE_DIRECTORY)

             cout << " [directorio]" << endl;

          else

             cout << " [" << (wfd.nFileSizeHigh * MAXDWORD) + wfd.nFileSizeLow << "]" << endl;

       } while(FindNextFile(busqueda, &wfd));

   }

   FindClose(busqueda);

   system("PAUSE");

   return EXIT_SUCCESS;

}

----8<------

Si quieres hacer búsquedas recursivas, no tendrás más remedio que

complicar el programa. Cada vez que localices un directorio hay que

buscar en su interior.

----

Hasta pronto.

--

Saludos,

Salvador  mailto:salvador@conclase.net

Con Clase:  http://www.conclase.net

====================================================================<<<

Whatever you Wanadoo, click below:

http://ads.smartgroups.com/adclick/CID=000000b7c79a99a500000000

====================================================================>>>

If you want to share pictures, use the calendar, or start a questionnaire

visit http://www.es.smartgroups.com/groups/c-con-clase

To leave the group, email: c-con-clase-unsubscribe@smartgroups.com

Report abuse http://www.smartgroups.com/text/abusereport.cfm?gid%3D269314&mid%3D29452