2010-10-24 22 views
5

tengo ruta a una carpeta por ejemplolista de archivos Ponerse en una carpeta en C

/myfolder

o en Windows:

C: \ myfolder

y quiero obtener una lista de todos los archivos en esa carpeta. ¿Cómo debo hacerlo en C?

¿Es diferente en C++ o C99?

¿Cómo puedo obtener una lista de sus carpetas?

Cualquier ayuda es apreciada.

+2

Esta pregunta no tiene nada que ver con C o C++, pero con el sistema operativo que está utilizando. Por favor sea más preciso. –

+0

@Jens ¿Uh? ¿Dónde ves la ambigüedad? Además tiene mucho que ver con C o C++. –

+3

C como un lenguaje tiene IO en los archivos, pero ni siquiera conoce el concepto de directorios. Los directorios son un concepto de sistema operativo, por lo tanto, para decir algo útil para responder esa pregunta, debe conocer el sistema operativo. –

Respuesta

4

En los sistemas operativos POSIX, puede llamar a opendir() y readdir(). En Windows puede llamar a _findfirst() y _findnext(). Con un poco de esfuerzo, puede implementar su propio opendir() y readdir() como funciones de envoltura en Windows, para que su código de aplicación pueda usar la misma API en todas partes. Un ejemplo de eso se puede encontrar here.

0

Esta es la tarea clásica, una solución posible tal vez encontrar en Kernigan & Ritchie - El lenguaje de programación C (Capítulo 8.6). La esencia de la tarea es el recorrido recursivo de la carpeta de destino y sus subcarpetas.

+0

¿Por qué se votó negativamente? La respuesta * es * en este capítulo de este libro.Supongo que se votó negativamente porque primero debes tener una copia. http://www.amazon.co.uk/C-Programming-Language-2nd/dp/0131103628 Vale la pena comprarlo si estás aprendiendo C. –

+0

@GaryWilloughby: Esta falda está muy cerca de donde K & R 2 muestra su edad. Hay una función 'dirwalk()' en el capítulo que se puede usar. Casi inmediatamente después, hay una implementación de muestra de 'opendir()', 'readdir()', 'closedir()' que no se usa en ningún sistema Unix actual, pero que solía funcionar en los 80 y principios de los 90. (No estoy seguro exactamente cuando dejó de funcionar, depende de la plataforma, en parte, pero la mayoría de POSIX-ish O/S se han movido a "debe usar nuestro' opendir() 'et al y no puede usar el de K & R 2 más "por, digamos, 2005, y probablemente mucho antes.) –

+0

Dije que' 'dirwalk()' es utilizable ". Requiere algunos ajustes menores para que sea utilizable con el estándar POSIX 'opendir()' et al. El tipo 'Dirent' necesita convertirse en' struct dirent' (o debe agregar 'typedef struct dirent Dirent;'), y las referencias a 'dp-> name' deben cambiarse a' dp-> d_name'. –

4

Puede utilizar las funciones declaradas en dirent.h

dirent.h es la cabecera de la biblioteca de C POSIX para el lenguaje de programación C que contiene construcciones que facilitan el desplazamiento directorio. La función no es parte del estándar C , pero se considera "pseudo-estándar" y generalmente es portátil entre plataformas.
http://en.wikipedia.org/wiki/Dirent.h

#include <dirent.h> 

int main(int argc, char **argv) 
{ 
    DIR *dir; 
    struct dirent *de; 

    dir = opendir("."); /*your directory*/ 
    while(dir) 
    { 
     de = readdir(dir); 
     if (!de) break; 
     printf("%i %s\n", de->d_type, de->d_name); 
    } 
    closedir(dir); 
    return 0; 
} 
1

Mira la get_all_files_within_folder() he escrito en C/C++ here, lo que respondí una pregunta similar a la suya. Funciona perfectamente para mí. Espero eso ayude.

Cuestiones relacionadas