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
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
Vous devez utiliser la fonction FindFirstFile
(documented here). C'est le moyen standard (et préféré) dans Windows, mais il n'est pas portable. L'en-tête dirent.h
que vous avez trouvé contient la définition des fonctions standard POSIX.
Pour le regard plein de code à cet exemple: Listing the Files in a Directory
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);
}
-1 pour l'utilisation de l'API 8 bits obsolète. – Philipp
@Philipp: quelle est l'API * 8 bits * obsolète ??? – Wizard79
@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
Qu'en est-il de la bibliothèque boost: système de fichiers. Boost.org
+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 –
Ce n'est pas vraiment la "méthode standard" dans Windows ... – Wizard79
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
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.
En fait, les fonctions de dirent.h sont les plus standard (POSIX). –
Mais le fichier n'est pas inclus dans VC++ 2008 – qwe
@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