Recherche de fichier en C++

Fermé
warskull Messages postés 20 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 31 octobre 2012 - 28 mai 2010 à 14:41
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 - 1 juin 2010 à 11:19
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

Salut,

Tu as codé ton interface avec quelle api ?
0
warskull Messages postés 20 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 31 octobre 2012
28 mai 2010 à 23:37
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 dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
29 mai 2010 à 00:09
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 vendredi 28 mai 2010 Statut Membre Dernière intervention 31 octobre 2012
31 mai 2010 à 09:38
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 mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
31 mai 2010 à 09:50
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 vendredi 28 mai 2010 Statut Membre Dernière intervention 31 octobre 2012
31 mai 2010 à 13:16
ç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 mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
31 mai 2010 à 13:59
http://www.prog-info.org/cpp/trietrecherche/dichotomie.php
sa t'aide?
0
warskull Messages postés 20 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 31 octobre 2012
31 mai 2010 à 14:05
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 mercredi 11 mars 2009 Statut Membre Dernière intervention 8 juin 2015 39
31 mai 2010 à 19:12
j'aurais essayer! bon courage! (perso je fais la même mais en vba excel...)
0
warskull Messages postés 20 Date d'inscription vendredi 28 mai 2010 Statut Membre Dernière intervention 31 octobre 2012
1 juin 2010 à 08:29
zut alors comment vais-je faire ?
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
1 juin 2010 à 11:19
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