2010-07-04 16 views
13

¿Cómo obtener todos los archivos en un directorio determinado utilizando C++ en Windows?Archivos en el directorio en C++

Nota:
encontré métodos que utilizan dirent.h pero necesitan una forma más estándar ...

, gracias

+2

En realidad, las funciones en dirent.h son las más estándar (POSIX). –

+3

Pero el archivo no está incluido en VC++ 2008 – qwe

+1

@Neil: POSIX no es parte de la biblioteca estándar y no está bien soportado por el compilador C/C++ más utilizado (MSVC) del sistema operativo más utilizado (Windows). – Wizard79

Respuesta

29

Uso FindFirstFile y las funciones relacionadas. Ejemplo:

HANDLE hFind; 
WIN32_FIND_DATA data; 

hFind = FindFirstFile("c:\\*.*", &data); 
if (hFind != INVALID_HANDLE_VALUE) { 
    do { 
    printf("%s\n", data.cFileName); 
    } while (FindNextFile(hFind, &data)); 
    FindClose(hFind); 
} 
+0

-1 para utilizar la obsoleta API de 8 bits. – Philipp

+1

@Philipp: ¿cuál es la obsoleta * 8-bit * API ??? – Wizard79

+0

@Lorenzo: El que utilizó Casablanca, llamado "ANSI" por MSDN Library (el término "8 bits" es técnicamente correcto, pero parece que lo uso exclusivamente). Solo está incluido para compatibilidad con Windows 9x. La API nativa es UTF-16. Para usarlo, defina 'UNICODE' en todas partes y reemplace las funciones de 8 bits como' printf' por macros genéricas ('_tprintf') o la función UTF-16 (' _wprintf'), y use constantes de cadena "anchas" con ' Prefijo L' o la macro 'TEXT'. Consulte su propia publicación para obtener un mejor ejemplo (aún sin 'UNICODE' porque eso debería definirse a través de un interruptor de compilación). – Philipp

10

Qué pasa con la biblioteca de impulso: sistema de archivos. Boost.org

+4

+1 para Boost. Es posible que desee vincular a los documentos del sistema de archivos: http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm –

+0

Esta no es la "forma estándar" en Windows ... – Wizard79

+1

Depende de la definición de la palabra "estándar". Si solo acepta las normas ISO, entonces no hay una forma estándar en absoluto. 'FindFirstFile' es la interfaz aceptada del sistema operativo para listar las entradas del directorio, y Boost.Filesystem es solo un contenedor alrededor de esta interfaz en Windows. Ambos son estándares de facto. – Philipp

4

El estándar aceptado para C++ se describe en N1975 ISO/IEC TS 18822: 2015, último borrador es N4100. Su compilador puede no tenerlo todavía, en cuyo caso Boost.FileSystem proporciona esencialmente lo mismo.

Cuestiones relacionadas