begin process at 2012 02 09 22:03:50
  Trouver un code source :
 
dans
 
Accueil > Forum > 

C

 > 

Linux

 > 

Fichier & Disque

 > 

Rechercher un fichier en C (UNIX)


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Rechercher un fichier en C (UNIX)

mercredi 4 février 2009 à 16:32:49 | Rechercher un fichier en C (UNIX)

AL.001

Bonjour,

Je cherche une fonction qui prend en entrée un chemin, un nom de fichier, et qui me retourne le chemin complet du fichier.
Et le tout sous UNIX...

Ex:  J'ai le répertoire /DEV/DATA/trflog qui contient 31 répertoires. Chacun de ces répertoires contient 24 répertoires, qui contiennent des fichiers de LOG tournants.
Mon programme doit chercher le fichier "logXXX.txt" dans  /DEV/DATA/trflog.

Merci de votre aide.

jeudi 5 février 2009 à 02:08:49 | Re : Rechercher un fichier en C (UNIX)

SAKingdom

Membre Club
Si par unix tu entends linux, scandir pour lister les fichiers d'un répertoire.
Sinon, peut-être cette fonction existe t-elle sous unix
Sinon, je sais pas.

C++ (@++)

jeudi 5 février 2009 à 09:30:21 | Re : Rechercher un fichier en C (UNIX)

AL.001

Je travail sur un deamon de log sur une plateforme SUN, sous UNIX.
Je cherche une fonction qui à partir d'un répertoire et d'un nom de fichier puisse me retourner le chemin du fichier en entrée...

jeudi 5 février 2009 à 10:29:00 | Re : Rechercher un fichier en C (UNIX)

AL.001

J'ai commencé cette fonction:

void findFile(const char * fileName, const char * Path, char * fullName)
{
   char ssdossier[PATHNAME_LEN];
   struct dirent *lecture;
   DIR *rep;
   rep = opendir(Path);
  
   while ((lecture = readdir(rep)))
   {
         if(!strcmp(lecture->d_name,".") || !strcmp(lecture->d_name,"..")) continue;
         sprintf(ssdossier,"%s/%s",Path,lecture->d_name);
        
         if (opendir(ssdossier) != NULL)
            findFile(fileName, ssdossier, fullName);
           
         if (!strcmp(fileName, lecture->d_name))
         {
            flog("SED0052I", "\n\n FICHIER TROUVE !!!!!!: %s\n\n",ssdossier);
            sprintf(fullName, "%s/%s", Path, lecture->d_name); 
            break;         
         }
   }  
   closedir(rep);
}

fileName = le nom du fichier que je cherche.
Path = le répertoire à partir duquel je fais la recherche
fullName = contiendra le chemin complet du fichier.

Pour l'instant cette fonction se vautre au bout du 238 répertoire lu...
Avec en message d'erreur "cannot open!".
 

jeudi 5 février 2009 à 10:43:07 | Re : Rechercher un fichier en C (UNIX)

AL.001

Je travail sur un deamon de log sur une plateforme SUN, sous UNIX.
Je cherche une fonction qui à partir d'un répertoire et d'un nom de fichier puisse me retourner le chemin du fichier en entrée...
jeudi 5 février 2009 à 16:11:23 | Re : Rechercher un fichier en C (UNIX)

SAKingdom

Membre Club
Y'a t-il un champ d_type dans lecture ?
Si oui, tu devrais être capable de tester ce champ plutôt que d'essayer d'ouvrir un répertoire avec un opendir.

Essais en remplaçant ceci:

if (opendir(ssdossier) != NULL)
            findFile(fileName, ssdossier, fullName);

par ceci:

if (lecture->d_type == DT_DIR)
            findFile(fileName, ssdossier, fullName);

C++ (@++)

jeudi 5 février 2009 à 16:42:26 | Re : Rechercher un fichier en C (UNIX)

AL.001

Merci, mais malheureusement pas de d_type dans ma structure dirent ...
J'ai allégé la fonction pour ne lister que les répertoires recursivement, mais j'ai tjs le même plantage:

void ListeRepRec(char Path[PATHNAME_LEN])
{
   char ssdossier[PATHNAME_LEN];
   struct dirent *lecture;
   DIR *rep;
   rep = opendir(Path);
  
   while ((lecture = readdir(rep)))
   {
         if(!strcmp(lecture->d_name,".") || !strcmp(lecture->d_name,"..")) continue;
  
         sprintf(ssdossier,"%s/%s", Path, lecture->d_name);
        
         if (opendir(ssdossier) != NULL)
         {
              ListeRepRec(ssdossier);
              flog("SED0052I", "\n\n LISTE DOSSIER: %s\n\n",ssdossier);
         }
   }
   closedir(rep);
}

Je ne sais plus quoi faire
Je ne comprend pas pourquoi il plante sur le 238e répertoire...


jeudi 5 février 2009 à 17:09:43 | Re : Rechercher un fichier en C (UNIX)

AL.001

Yala !
J'approche du but...

Nouvelle fonction listant intégralement le contenu de mon répertoire et de ses sous-répertoires !
A base de liste chaînée:

void ListeRep(char Path[PATHNAME_LEN])
{
     char ssPath[PATHNAME_LEN];
     DIR * rep;
     struct dirent *entree_repertoire;
     struct ListeFichier
     {
            char nomFichier[64];
            struct ListeFichier * suivant;
     } depart, *noeud, *noeud_precedent, *nouveau_noeud;
    
     if ((rep = opendir(Path)) == NULL)
     {
            flog("SED0052E", "\n\n ERREUR ouverture: %s\n\n", Path);
     }
     else
     {
            depart.suivant = NULL;
            while (entree_repertoire = readdir(rep))
            {
                  noeud_precedent = &depart;
                  noeud = depart.suivant;
                 
                  while ((noeud) && (strcmp(entree_repertoire->d_name, noeud->nomFichier) > 0))
                  {
                        noeud = noeud->suivant;
                        noeud_precedent = noeud_precedent->suivant;
                  }
                 
                  nouveau_noeud = (struct ListeFichier *) malloc(sizeof(struct ListeFichier));
                 
                  if (nouveau_noeud == NULL)
                  {
                        flog("SED0052E", "\n\n MEMOIRE INSUFFISANTE !!");
                        exit(1);
                  }
                 
                  nouveau_noeud->suivant = noeud;     
                  noeud_precedent->suivant = nouveau_noeud;
                  strcpy(nouveau_noeud->nomFichier, entree_repertoire->d_name);
            }
           
            closedir(rep);
            noeud = depart.suivant;
            while (noeud)
            {
                 flog("SED0052E", "\n\n NOEUD->NomFichier: %s\n\n", noeud->nomFichier);
                 if(!strcmp(noeud->nomFichier, ".") || !strcmp(noeud->nomFichier, ".."))
                 {
                    flog("SED0052E", "\n\n . ou ..\n\n");                            
                 }
                 else
                 {
                    sprintf(ssPath, "%s/%s", Path, noeud->nomFichier);
                    flog("SED0052E", "\n\n RECURSIVE POUR: %s\n\n", ssPath); 
                    ListeRep(ssPath);
                 }
                 noeud = noeud->suivant;
            }
     }
}

Quand pensez-vous ? Ce n'est pas trop gourmand ou risqué ?
Pour l'instant ça ne ma pas sauté en pleine face...
Je vais tenter d'intégrer une condition pour sortir une fois le nom du fichier trouvé !

vendredi 6 février 2009 à 13:53:32 | Re : Rechercher un fichier en C (UNIX)

AL.001

Réponse acceptée !
BINGO !

C'est bon en adaptant ma fonction, j'ai réussi ma recherche de fichier !
Il s'arrète proprement une fois le fichier trouvé !




Cette discussion est classée dans : fichier, répertoires, chemin, unix, rechercher


Répondre à ce message

Sujets en rapport avec ce message

Comment faire pour rechercher un fichier dans tout le disque dur ? [ par appstmd ] Salut !J'ai besoin de savoir comment on peut scanner le disque dur à la recherche d'un fichier déterminé. Quelqu'un connait-il une astuce ou un algori Lecture/écriture de fichier .INI sous Unix? [ par Samprayoga ] Bonjour à tous,C'est mon premier message sur ce forum, alors je vais essayer d'être clair.J'aimerais savoir s'il existe ou si quelqu'un a déjà impléme Rechercher une chaîne de caractère dans un fichier et afficher la ligne !! [ par UncleShu ] Exemple : Mot à rechercher :-> friend----fichier où il faut rechercher le mot-----enfant childenfants childrenami friendwhen Récupération du chemin d'un fichier dans le 'path' [ par BettaSplendens ] Bonjour,j'ai 2 choses... d'un côté le chemin avec laquelle est lancée mon application, qui comporte "bien entendu" plusieurs répertoires.. désignons i Disc dur et programmation [ par zinotron ] Voila l'affaire: comment manipule ton un dic dur en C ou C++?pas pour lire ou ecrire des données dessus (ca c de la manip de fichier) mais pour par ex splitter de fichier [ par 24Karas ] salut à tousEn fait je fais un splitter de fichier mais j'ai un probleme. il me rajoute 1 octet sur la découpe et 1 octet par fichier pour la reconsti recuperer chemin d'1 exe en c++ (sous unix/linux) [ par liloupucienne ] bonjour, je realise un soft qui doit tourner sous les 2 plateformes windows/unix j'ai un fichier d'initialisation et je voudrai qu'il soit au meme end Chemin d'un fichier [ par gagah1 ] Salut à tous!Je voudrais savoir quelle fonction en API win32 dois-je appeller pour chercher le chemin d'un fichier quelconque?Merci d'avance pour les rechercher une string dans un fichier sous windows [ par doudblast ] voilà : l'idée est de récuperer une ip dans un fichier txtpar contre cette ip ne sera pas toujours la même et ne sera pas toujours précisemment au mêm Linux rechercher un type de fichier particulier [ par farfx ] Bonjour,Je voudrais identifier et compter des fichiers *.tar.gz dans un répertoire donné sous linux pour pouvoir ensuite les traiter.Qqu'un a-t-il une


Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,515 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales