IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Problème de comparaison de noms de fichiers


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Consultant Flex/J2EE
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant Flex/J2EE

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Problème de comparaison de noms de fichiers
    Je dois en fait créér un synchroniseur de fichier et pour cela je dois comparer 2 repertoires, avec leur fichier respectifs.
    J'utilise la méthode parcours pour mettre les noms des fichiers dans un tableau.
    Le pb est que pour le premier tableau certains noms ne sont pas en entier :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys/types.h>
    #include <unistd.h>
    #include <limits.h>
    #include <sys/stat.h>
    #include <time.h>
    #include <fcntl.h>
    #include <string.h>
    #include <stddef.h>
    #include <dirent.h>
     
    #define BUFFER_SIZE 4096
    char buf[BUFFER_SIZE];
     
     
    char ** parcours(char *rep, char **tab)
    {
     
     
       DIR *drep;
       int i = 0;
       struct dirent *de;
       struct stat b; 
     
       drep=opendir(rep);
     
       if(!drep){
          printf("Erreur d'ouverture du repertoire\n");
          return;
       }
     
        tab =  malloc(sizeof(char*) * 1000);
     
     
       while((de=readdir(drep))!=NULL)
       {
        if(!(strcmp(de->d_name,".")==0)||!(strcmp(de->d_name,"..")==0)){
    	tab[i] =de->d_name;
            //printf("%d %s \n", i, tab[i]);
           i++;
          }
     
           //faire cas ou c un repertoire    
       }
     
       closedir(drep);
       return(tab);
    }
     
    int main (int argc, char **argv)
    {
     
       char **tabA, **tabB;
       int i;
       int existA, existB;
     
       if(argc==1)
       {
          printf("pas assez d'arguments");
       }
     
       tabA = parcours(argv[1], tabA);
       tabB = parcours(argv[2], tabB);
     
          int j;  
          for(j=0; j<longueur(tabB); j++ )
          {     
                printf("file A : %s \n",tabA[j]);
                printf("file B : %s \n",tabB[j]);
     
           }
     
    }

    Dans cet exemple j'utilise 2 repertoires (identiques) qui contiennent tt les 2 les fichiers file A : copy.tar.tar
    copy.tar.tar
    introduction.pdf
    io-fichiers.pdf
    TD TP (repertoire)

    lorsque je lance le programme avec en argument les 2 noms de fichiers cela me donne :
    file A : .
    file B : .
    file A : ..
    file B : ..
    file A : copy.tar.tar
    file B : copy.tar.tar
    file A : tion.pdf
    file B : introduction.pdf
    file A : ers.pdf
    file B : io-fichiers.pdf
    file A : TD TP
    file B : TD TP


    dans le tableau A, introduction.pdf et io-fichiers. n'ont pas leur nom en entier. pouvez vous m'aidez? je ne comprends pas le pb. surtout que si je ne lance pa la méthode parcours ac le tableauB et uniquement avec le A, il est normal.

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par ProviewJava1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    	tab[i] =de->d_name;
    dans le tableau A, introduction.pdf et io-fichiers. n'ont pas leur nom en entier. pouvez vous m'aidez? je ne comprends pas le pb. surtout que si je ne lance pa la méthode parcours ac le tableauB et uniquement avec le A, il est normal.
    Bah oui. Il faut faire des copies des chaines... Je recommande strdup() qui est POSIX.1 donc très portable.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	tab[i] = strdup (de->d_name);
    strdup() fait un malloc(), alors penser à libérer les chaines allouées après usage...
    Pas de Wi-Fi à la maison : CPL

  3. #3
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par ProviewJava1
    [...]
    lorsque je lance le programme avec en argument les 2 noms de fichiers cela me donne :
    [...]
    Impossible !!! Ce programme ne peut pas fonctionner !!!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Project   : Console application
    Compiler  : GNU GCC Compiler (called directly)
    Directory : D:\Documents and Settings\ab84533\My Documents\Temp\CodeBlocks_Project\
    --------------------------------------------------------------------------------
    Switching to target: default
    Compiling: main.c
    main.c: In function `parcours':
    main.c:29: warning: `return' with no value, in function returning non-void
    main.c:22: warning: unused variable `b'
    main.c:49: warning: this function may return with or without a value
    main.c: In function `main':
    main.c:67: warning: implicit declaration of function `longueur'
    main.c:55: warning: unused variable `i'
    main.c:56: warning: unused variable `existA'
    main.c:56: warning: unused variable `existB'
    main.c:74: warning: control reaches end of non-void function
    main.c:54: warning: 'tabA' might be used uninitialized in this function
    main.c:54: warning: 'tabB' might be used uninitialized in this function
    Linking console executable: D:\Documents and Settings\ab84533\My Documents\Temp\CodeBlocks_Project\console.exe
    .objs\main.o: In function `main':
    D:/Documents and Settings/ab84533/My Documents/Temp/CodeBlocks_Project/main.c:67: undefined reference to `longueur'
    collect2: ld returned 1 exit status
    Process terminated with status 1 (0 minutes, 0 seconds)
    1 errors, 10 warnings
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

  4. #4
    Futur Membre du Club
    Profil pro
    Consultant Flex/J2EE
    Inscrit en
    Décembre 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Consultant Flex/J2EE

    Informations forums :
    Inscription : Décembre 2005
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci Emmanuel Delahaye ça marche

  5. #5
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Tu peux nous montrer ton code corrigé qui marche. Désolé je suis un peu curieux comme gars...
    Software Failure. Press left mouse button to continue.
    Guru Meditation #0100000C.000FE800

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 24/02/2014, 17h43
  2. Probléme pour récuperer le nom du Fichier API Windows
    Par thanks33 dans le forum Débuter
    Réponses: 22
    Dernier message: 28/03/2013, 16h18
  3. Problème d'encodage des noms de fichiers
    Par fort88 dans le forum Langage
    Réponses: 3
    Dernier message: 14/04/2009, 16h36
  4. problème d'accent dans nom de fichier à récupérer
    Par Gunner4902 dans le forum Langage
    Réponses: 4
    Dernier message: 20/07/2008, 13h11
  5. [DOM] Problème d'accent sur les noms de fichier avec mon parseur
    Par ujoodha dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 06/04/2006, 21h55

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo