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 :

probleme avec des archive en c++


Sujet :

C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut probleme avec des archive en c++
    bonjour!
    j'ai un probleme mon programme stocke bien le premier fichier avec ce que je lui demande mais des le deuxieme il me dit qu'il existe deja dans stockage.bin, mais il n'y est pas et je vois pas l'erreur pouvait vous m'aider

    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
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
     
    void TEssai::RechercherNom()
    {
         //creation du fichier de stockage si enexistant
         FILE* pfic;
         pfic=fopen("stockage.bin","a");
         fclose(pfic);
     
     
     
         //ouverture de la fonction qui lit les fichier .zip
         struct dirent *lecture;     
         DIR* rep;
         rep=opendir("C:/Program Files/EasyPHP1-7/www/test");           //adresse ou se situe les fichier que je veux
     
     
         char* nom;
         int dateF;
         int dateeffacement;
         int heureeffacer;
         char* nomF;
         int length1;
     
         struct Essai e;                                                 //declaration de ma structure
     
     
         while(lecture=readdir(rep))                                    //tant qu'il y a des fichiers
         {
     
              bool fichier_trouver=false;
              nom=lecture->d_name;                                      //je lit leur nom
     
     
               //ouverture du fichier de stockage
     
     
              if(nom[0]!='.')                                           //je regarde si ce n'est pas . ou ..
              {
                        pfic=fopen("stockage.bin","r+");
                        cout<<"je suis dans le if"<<endl;
                        while((length1=fread(&e,sizeof(struct Essai),1,pfic))!=0)
                        {
     
                                   if((strcmp(nom,e.nom))==0)                            //si c'est bon je test voir si il existe pas deja dans ma 
                                                                                       //base de donnee
                                   {                                      
     
                                               fichier_trouver=true;
                                   }             
                        }
     
                      fclose(pfic);
                        if(fichier_trouver==false)                                            //si elle existe pas
                        {             
                                   pfic=fopen("stockage.bin","a");
     
                                               //structure pour avoir les informations de date par rapport a l'ordi
                                                 time_t rawtime;
                                                struct tm* timeinfo;
                                                 time(&rawtime);
                                                timeinfo=localtime(&rawtime); 
     
                                                     //stokage du nom du fichier
                                                 e.nom=nom;
                                                 //stockage de la date
                                                 e.date=(timeinfo->tm_mday);
                                                 //stockage de l'heure
                                                 e.heure=(timeinfo->tm_hour);
                                                 //traitement de la date pour creer la date d'effacement
                                                 dateeffacement= (timeinfo->tm_mday);
     
                                                 if((dateeffacement>0)&&(dateeffacement<28))
                                                 {
                                                         dateeffacement+=1;
                                                          e.dateAeffacer=dateeffacement;
                                                           fwrite(&e,sizeof(struct Essai),1,pfic);
                                                 }
                                                 else
                                                 {
                                                     dateeffacement=1;
                                                     e.dateAeffacer=dateeffacement;
                                                     fwrite(&e,sizeof(struct Essai),1,pfic);
                                                }  
                                       fclose(pfic); 
                      }
     
     
              }system("PAUSE");
     
         }
         closedir(rep);
     
    }

  2. #2
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Points : 2 757
    Points
    2 757
    Par défaut
    salut,

    c'est du C ton histoire, pas du C++.

  3. #3
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Si j'ai bien compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      //stokage du nom du fichier
       e.nom=nom;
    nom est défini comme char * et a été initialisé par l'adresse du tableau contenant le nom (lecture->d_name). Ceci ne copie pas le nom , mais l'adresse du tableau contenant le nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     fwrite(&e,sizeof(struct Essai),1,pfic);
    sauvegarde cette adresse (dont on se moque d'ailleurs) mais pas le nom.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      if((strcmp(nom,e.nom))==0)         //si c'est bon je test ....
    Si (par miracle) cette adresse n'a pas changé lorsqu'on lance le programme une deuxième fois, nom et e.nom désigne le même tableau et le test est bon à tout coup!

    Il faut que e.nom soit un tableau de caractères, et qu'avant de copier la structure, on COPIE le contenu du tableau lecture->d_name dedans.

  4. #4
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    je vois ce que tu veux dire mais j'arrive pas a le mettre en oeuvre.
    comment pourai je faire stp

  5. #5
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    c'est cette parti qui marche mal
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
                        while((length1=fread(&e,sizeof(struct Essai),1,pfic))!=0)          // tant que stockage n'est pas fini d'etre lu
                        {
                                   cout<<"coucou je cherche"<<endl;   
                                   cout<<"nom ="<<nom<<endl;
                                   cout<<"i avant le oui:"<<fichier_trouver<<endl;
                                   if((strcmp(nom,e.nom))==0)                                                                                                              //base de donnee
                                   {
                                       cout<<"nom trouver="<<e.nom<<endl;                                       
                                       cout<<"je suis dans i=1  "<<fichier_trouver<<endl;
                                               fichier_trouver=true;
                                   }             
                        }
    voyer vous l'erreur?

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    struct Essai doit avoir un champ nom susceptible de stocker le nom. Par exemple, pour illustrer le problème (en style C mais d'autres solutions sont possibles et plus esthétiques en C ou C++ et peuvent être discutées ensuite) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct Essai 
    {
    ...
      char nom[50];
    ...
    };
    au moment du stockage du nom du fichier, on copie la chaîne dans ce champ
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    //stokage du nom du fichier
    strncpy(e.nom,nom,49);
    e.nom[49] = '\0';
    puis, plus tard
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fwrite(&e,sizeof(struct Essai),1,pfic);

  7. #7
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    j'ai bien fait ce que tu m'as dit diogene et le stockage dans ma deuxieme parti se passe tres bien.
    mais le probleme et quand le fichier de stockage et vide il stocke bien le premier fichier mais les autres non.il passe dans le if ou il y a le strcmp la ou il ne devrait pas passer.
    quand je lui demande d'afficher e.nom,il me donne le nom du fichier en cour de lecture alor que normalement il peut pas du faite qu'il est pas encore stocker.

  8. #8
    Futur Membre du Club
    Inscrit en
    Juin 2006
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 8
    Points : 7
    Points
    7
    Par défaut
    merci mais c'est bon sa fonctionne

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

Discussions similaires

  1. Problème avec une archive tar
    Par sylsau dans le forum Shell et commandes GNU
    Réponses: 6
    Dernier message: 16/12/2005, 09h57
  2. [FLASH MX] Probleme avec des liens.
    Par maxcmoi dans le forum Flash
    Réponses: 2
    Dernier message: 12/11/2005, 11h11
  3. Probleme avec des socket !
    Par Ptimath44 dans le forum Réseau
    Réponses: 11
    Dernier message: 31/10/2005, 18h11
  4. Probleme avec des pointeurs...
    Par barucca dans le forum C++
    Réponses: 5
    Dernier message: 23/08/2005, 21h05
  5. Problemes avec des cellules vides
    Par arsgunner dans le forum ASP
    Réponses: 7
    Dernier message: 14/06/2004, 08h42

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