J'ai besoin d'un moyen de rechercher des fichiers sur l'ordinateur tels que Windows Explorer. Je veux que mon programme de recherche disons disque dur c :. J'ai besoin de rechercher C: \ pour les dossiers et les fichiers (juste ceux que vous pourriez voir dans c: \ puis si l'utilisateur clique sur un fichier dans la liste comme le test de dossier (C: \ test) il chercherait test et laisserait l'utilisateur voir quels fichiers/dossiers sont dans cecomment rechercher des fichiers et des dossiers sur l'ordinateur
Répondre
Puisque vous avez mentionné les fenêtres, la façon la plus directe vers l'avant winapi de le faire est avec FindFirstFile et FindNextFile fonctions.
edit: Voici un exemple qui vous montre comment énumérer tous les fichiers/dossiers d'un répertoire. Boost :: filesystem peut être une solution multi-plate-forme pour cela (vérifier pour de telles fonctions dans celui-ci)
#include <Windows.h>
#include <iostream>
int main()
{
WIN32_FIND_DATA file;
HANDLE search_handle=FindFirstFile(L"C:\\*",&file);
if (search_handle)
{
do
{
std::wcout << file.cFileName << std::endl;
}while(FindNextFile(search_handle,&file));
FindClose(search_handle);
}
}
vous pouvez utiliser Directory
membres de la classe pour le faire avec C# ou C++ managée Voir l'article MSDN suivant:..
http://support.microsoft.com/kb/307009
Si vous souhaitez utiliser C + + avec MFC vous pouvez utiliser CFileFind
http://msdn.microsoft.com/en-us/library/f33e1618%28v=VS.80%29.aspx
Vous devrez fournir votre propre fenêtre de navigation pour présenter l'arborescence du système de fichiers.
Ou vous pouvez utiliser l'un des contrôles de répertoire/fichier pour faire les deux pour vous.
Qui utilise .Net et nécessite l'utilisation de C++/CLI. –
@Georg: Merci pour la clarification. J'ai ajouté des informations supplémentaires au cas où il voudrait utiliser C++ sans .NET. –
: | Je ne vois pas l'info – blood
Cela dépend du système d'exploitation. La question SO
How can I get a list of files in a directory using C or C++?
gère bien ce problème. Vous pouvez télécharger DIRENT ici. Maintenant que vous avez ceci, je vous recommande de rechercher récursivement un fichier avec un algorithme DFS/. Vous pouvez supposer que toute la structure du répertoire est tree où chaque fichier est un nœud feuille et chaque sous-répertoire est un nœud interne.
Donc, tout ce que vous avez à faire est,
- obtenir la liste des fichiers/dossiers dans un répertoire avec une fonction telle que:
void getFilesFolders(vector<string> & dir_list, const string & folder_name)
- Si c'est un répertoire, allez à 1 avec le nom du répertoire
- S'il s'agit d'un fichier, terminez-le s'il s'agit du fichier que vous recherchez, sinon passez au fichier suivant.
Comment puis-je obtenir une liste de fichiers dans un répertoire en utilisant C ou C++? c'est bien mais le code je n'arrive pas à travailler. seulement le code de Brian R. Bondy le dernier de son mais il trouve seulement des fichiers partie de ce que je voulais et aussi je ne peux pas trouver comment cela fonctionne donc je ne peux pas l'éditer pour mon programme :( – blood
jouer avec dirent à voir si cela fonctionne vous revenir sur ce – blood
uhh je ne peux pas le télécharger i dirent mais il décompresse un fichier et .9 c'est tout ce que j'ai raté quelque chose parce que je viens de télécharger à partir de votre lien – blood
je ne voulais pas vraiment le logiciel 3ème partie – blood
Pas vraiment 3ème partie logiciel tant, coup de pouce est pratiquement considéré comme la norme par les programmeurs C++, mais semble alors vous ne pas être celui qui aime utiliser des bibliothèques standard (autres que iostream, l'un des de C++ moins bonnes fonctionnalités). – CashCow
#include <Windows.h>
#include <iostream>
int FindF(char* pDirectory)
{
char szFindPath[MAX_PATH] = {0};
strcpy(szFindPath, pDirectory);
strcat(szFindPath, "\\*");
WIN32_FIND_DATA file;
HANDLE search_handle=FindFirstFile(szFindPath,&file);
if (search_handle)
{
do
{
if(file.dwFileAttributes == FILE_ATTRIBUTE_DIRECTORY)
{
strcpy(szFindPath, pDirectory);
strcat(szFindPath, "\\");
strcat(szFindPath, file.cFileName);
FindF(szFindPath);
}
std::wcout << file.cFileName << std::endl;
}while(FindNextFile(search_handle,&file));
CloseHandle(search_handle);
}
}
C'est presque une bonne solution autre que: 1. C'est surtout en C que vous mettez en iostream donc vous écrivez en C avec iostream ... Si vous voulez écrire en C++ j'utiliserais au moins std :: string. Votre vraie gaffe sérieuse est que vous ne vérifiez pas pour les «points» de sorte que le vôtre se reproduira pour toujours (ou plus probablement souffrir du nom de ce site). – CashCow
Utilisez FindClose() pour fermer le handle, ouvert avec FindFirstFile(). CloseHandle() lancera "handle invalide" en mode debug. – NoAngel
Il n'est vraiment pas nécessaire d'utiliser une bibliothèque tierce pour cela. C'est une fonction courte et indépendante qui répertorie tous les fichiers (avec leurs chemins) dans un répertoire, y compris les fichiers des sous-répertoires. std::string folderName
doit terminer avec \
, et si vous voulez lister tous les fichiers sur l'ordinateur, il suffit de créer une boucle dans la fonction d'appel avec GetLogicalDriveStrings (Il retourne des chaînes avec \
, donc cela ne pourrait pas être plus pratique dans ce cas).
void FindAllFiles(std::string folderName)
{
WIN32_FIND_DATA FileData;
std::string folderNameWithSt = folderName + "*";
HANDLE FirstFile = FindFirstFile(folderNameWithSt.c_str(), &FileData);
if (FirstFile != INVALID_HANDLE_VALUE) {
do {
if (strcmp(FileData.cFileName, ".") != 0 && strcmp(FileData.cFileName, "..") != 0)
{
if(FileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
std::string NewPath = folderName + FileData.cFileName;
NewPath = NewPath + "\\";
FindAllFiles(NewPath);
}
else
{
std::cout /*<< folderName*/ << FileData.cFileName << std::endl;
}
}
} while(FindNextFile(FirstFile, &FileData));
}
}
Ceci est la version ASCII, rappelez-vous que les fichiers et les dossiers peuvent être nommés dans Unicode
Je me demandais simplement, pourriez-vous expliquer quels sont les avantages par rapport à FindFile, s'il vous plaît? (et btw, ne devrait-il pas être ASCII ou ANSI?) –
- 1. Supprimer des dossiers et des fichiers contenant
- 2. FinalBuilder Énumération des fichiers et des dossiers
- 3. Spécification des dossiers et des fichiers Subversion
- 4. Comment indexer et rechercher des fichiers .doc
- 5. Dans Perforce P4V, comment rechercher des listes de modifications avec des fichiers dans des dossiers particuliers?
- 6. Comment organiser manuellement des fichiers et des dossiers dans NetBeans?
- 7. Zip et décompresser des fichiers et des dossiers
- 8. Rechercher des fichiers sur un serveur distant
- 9. rechercher des fichiers texte
- 10. Vue simple des fichiers et des dossiers en C#
- 11. Perl Renommer des dossiers et des fichiers avec File :: Find
- 12. Comment créer des dossiers en utilisant des noms de fichiers, puis déplacer des fichiers dans des dossiers?
- 13. Comment supprimer des fichiers en traversant l'arborescence des dossiers
- 14. Ajoutez le nom des dossiers et sous-dossiers parents aux noms des fichiers multiples
- 15. php scandir -> Rechercher des fichiers/répertoires
- 16. Structure des fichiers et des dossiers d'une application/projet basée sur C
- 17. liste des fichiers et dossiers de svn repository dans C#
- 18. Déplacer des fichiers dans des dossiers avec des noms partiels
- 19. Utilisez grep pour rechercher une chaîne dans les fichiers, inclure des sous-dossiers
- 20. Comment rechercher un fichier sur le système de fichiers des utilisateurs? (Adobe Air application)
- 21. URL RESTful et des dossiers
- 22. dossiers sélectionnez plusieurs fichiers et
- 23. Liste des dossiers et sous-dossiers sous DOS et Unix?
- 24. Rechercher des fichiers jpeg en utilisant python
- 25. Activer GtkFileChooserDialog pour sélectionner des fichiers OU des dossiers
- 26. Rechercher des fichiers exécutables sans extensions?
- 27. Comment exclure des fichiers et des dossiers de la commande tfpt scorch?
- 28. Comment valider des fichiers de différents dossiers dans MacHg?
- 29. Comment convertir des dossiers spéciaux en noms de fichiers complets
- 30. Comment ajouter des dossiers dans Source Safe?
Et votre question est ... quoi? –
Il s'agit d'un problème spécifique à la plate-forme. Êtes-vous sur Windows, Unix, etc.? – TreDubZedd
S'il se réfère à son disque dur comme 'C:' et les répertoires comme 'dossiers' il est assez évident que sa plate-forme pourrait être ... ;-) Oh, et le séparateur de chemin de barre oblique inverse le donne aussi. –