Recherche de fichier en C++

warskull Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,
Je suis en train de développer un programme en C++ qui permet de saisir un nom ou une partie du nom d'un fichier pour ensuite le rechercher parmi des dossiers et des sous-dossiers.
Cependant je n'arrive pas à écrire la fonction permettant de parcourir les dossiers pour trouver le fichier.
Merci de me proposer des idées ou des bouts de code pour m'aider à m'avancer.
L'interface étant déjà faite, il ne me reste plus que ça à faire.
A voir également:

10 réponses

francis
 
Salut,

Tu as codé ton interface avec quelle api ?
0
warskull Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Je code sur Code::Blocks et je compile avec Qt.

Je l'ai pas précisé mais j'ai commencé à apprendre le C que depuis 2 semaines c'est pour ça que j'ai des difficultés la ^^.

Et plus précisement j'aimerais savoir comment faire parcourir au programme tout les dossiers pour récuperer les fichiers pouvant correspondre à la recherche et ensuite pouvoir ouvrir celui que l'on veut.
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
En C, il y a les fonctions: opendir(), readdir() et closedir(). Ceci donne accès au contenu des répertoires.
Avec Qt, donc en C++, il y a les classes 'QDir', 'QFile' & 'QFileInfo' qui permettent l'accès au contenu des répertoires et aux caractéristiques des fichiers (lire l'excellente documentation de Qt).
Bonne continuation.
0
warskull Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Merci pour les fonctions mais je suis un peu perdu, je n'arrive pas à les utiliser ^^.
J'ai trouvé quelques exemples sur internet mais même la ça me met des erreurs.

Quelqu'un pourrait me donner un exemple pour parcourir les dossiers puis en ouvrir un ?
Merci.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   39
 
Salut, commence par regarder du coté d'un algorithme de recherche par dichotomie, ce cours peut déjà t'aider... enfin je l'espère pour toi !

http://www.netprof.fr/Voir-le-cours-en-video-flash/Informatique/Programmation/Etude-d-un-algorithme-de-recherche,6,85,558,1.aspx
0
warskull Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
ça me sert a rien cette vidéo, je sais déjà comment faire des algorithme, le problème c'est que j'ai commencé le C++ il n'y a pas longtemps alors je sais pas trop m'en servir.

C'est pour ça que j'aimerais des exemples de code pour bien voir comment m'y prendre.
0
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   39
 
http://www.prog-info.org/cpp/trietrecherche/dichotomie.php
sa t'aide?
0
warskull Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
Non toujours pas désolé...
L'algorithme pour rechercher je le comprend mais là ou j'y arrive pas, c'est pour utiliser les fonctions nécessaires pour faire une recherche dans les dossiers puis les ouvrir.
Comme celle que loupious a cité un peux plus haut, je n'arrive pas à les intégrer à mon programme.
0
yacleouf Messages postés 438 Date d'inscription   Statut Membre Dernière intervention   39
 
j'aurais essayer! bon courage! (perso je fais la même mais en vba excel...)
0
warskull Messages postés 20 Date d'inscription   Statut Membre Dernière intervention  
 
zut alors comment vais-je faire ?
0
loupius Messages postés 697 Date d'inscription   Statut Membre Dernière intervention   148
 
Pour les fonctions que tu ne connais pas, tu dois rechercher comment les utiliser. Faire un 'man' sur la toile n'est pas très compliqué.
Je te donne un exemple de parcours de répertoire et ce sera à toi de l'adapter à tes propres besoins.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dirent.h>
#include <sys/types.h>
#include <sys/stat.h>

void traitementRepertoire(const char* nomRepert)
{
  DIR* dir;
  struct dirent* dirent;
  struct stat status;
  char name[NAME_MAX]; // Je suppose ne pas dépasser cette longueur

  if (!(dir = opendir(nomRepert)))
    return;
  while ((dirent = readdir(dir)))
  {
    if (!strcmp(dirent->d_name, ".") || !strcmp(dirent->d_name, ".."))
      continue;
    strcpy(name, nomRepert);
    strcat(name, "/");
    strcat(name, dirent->d_name);
    if (!stat(name, &status))
    {
      if (S_ISDIR(status.st_mode))
        traitementRepertoire(name);
      else if (S_ISREG(status.st_mode))
        printf("%s\n", name);
    }
  }
  closedir(dir);
}

int main(int argc, char* argv[])
{
  if (argc > 1)
    traitementRepertoire(argv[1]);
  return(EXIT_SUCCESS);
}
Toutes les fonctions utilisées dans cet exemple sont définies Posix; avec Linux tu as quelques fonctions supplémentaires très puissantes qui sont définies dans Unix98 comme 'scandir' ou 'fnmatch' et qui simplifient énormément la recherche de fichiers.
Bonne réflexion.
0