2010-07-04 2 views
13

Comment obtenir tous les fichiers dans un répertoire donné en utilisant C++ sur Windows?Fichiers dans le répertoire en C++

Note:
J'ai trouvé des méthodes qui utilisent dirent.h mais je besoin d'une façon plus standard ...

Merci

+2

En fait, les fonctions de dirent.h sont les plus standard (POSIX). –

+3

Mais le fichier n'est pas inclus dans VC++ 2008 – qwe

+1

@Neil: POSIX ne fait pas partie de la bibliothèque standard et n'est pas bien supporté par le compilateur C/C++ (MSVC) le plus utilisé du système d'exploitation le plus utilisé (Windows). – Wizard79

Répondre

29

Utilisez FindFirstFile et fonctions connexes. Exemple:

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 pour l'utilisation de l'API 8 bits obsolète. – Philipp

+1

@Philipp: quelle est l'API * 8 bits * obsolète ??? – Wizard79

+0

@Lorenzo: Celui que casablanca utilisait, appelé "ANSI" par MSDN Library (le terme "8 bits" est techniquement correct, mais semble être utilisé par moi exclusivement). Il est seulement inclus pour la compatibilité avec Windows 9x. L'API native est UTF-16. Pour l'utiliser, définissez 'UNICODE' partout et remplacez les fonctions 8 bits comme' printf' soit par des macros génériques ('_tprintf') soit par la fonction UTF-16 (' _wprintf'), et utilisez des constantes de type "wide" avec '' L' préfixe ou la macro 'TEXT'. Voir votre propre publication pour un meilleur exemple (toujours sans 'UNICODE' car cela devrait être défini via un commutateur du compilateur). – Philipp

10

Qu'en est-il de la bibliothèque boost: système de fichiers. Boost.org

+4

+1 pour Boost. Vous voudrez peut-être créer un lien vers les documents du système de fichiers: http://www.boost.org/doc/libs/1_43_0/libs/filesystem/doc/index.htm –

+0

Ce n'est pas vraiment la "méthode standard" dans Windows ... – Wizard79

+1

Cela dépend de la définition du mot "standard". Si vous n'acceptez que les normes ISO, il n'y a pas de standard du tout. 'FindFirstFile' est l'interface acceptée du système d'exploitation pour répertorier les entrées du répertoire, et Boost.Filesystem est juste un wrapper autour de cette interface sous Windows. Les deux sont des normes de facto. – Philipp

4

La norme acceptée pour C++ est décrit dans N1975 ISO/IEC TS 18822: 2015, le dernier projet est N4100. Votre compilateur peut ne pas l'avoir encore, auquel cas Boost.FileSystem fournit essentiellement la même chose.

Questions connexes