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++Builder Discussion :

Pb FileRead fichier


Sujet :

C++Builder

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Par défaut Pb FileRead fichier
    Bonjour à Tous,
    J'utilise la fonction FileWrite pour écrire des données provenant d'une structure.
    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
    void __fastcall TForm1::BitBtn1Click(TObject *Sender)
    {
     int iFileHandle;
     
     struct Poussin
            {
                    char Pous1[4];
                    char Pous2[4];
            }Nais;
     
     StrCopy (Nais.Pous1,MaskEdit1->Text.c_str());
     StrCopy (Nais.Pous2,MaskEdit2->Text.c_str());
     
     iFileHandle = FileCreate("C:\\Poussin.txt");
     
     FileWrite(iFileHandle,Nais.Pous1, sizeof(Nais.Pous1));
     FileWrite(iFileHandle,Nais.Pous2, sizeof(Nais.Pous2));
     
     FileClose(iFileHandle);
    }
    De ce côté, pas de problème.
    Par contre, j'essaye d'utiliser la fonction FileRead pour récupérer, non pas la totalité du fichier, mais une partie des données.
    Pour les besoins de débuggage, j'affiche un ShowMessage : données bien présentes. Voici le code utilisé :
    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
    void __fastcall TForm1::BitBtn2Click(TObject *Sender)
    {
     int iFileHandle;
     int iFileLength;
     int iBytesRead;
     char *psz;
     
     
     iFileHandle = FileOpen("C:\\Poussin.txt", fmOpenRead);
     iFileLength = FileSeek(iFileHandle,0,2);
     ShowMessage(iFileLength);
     
     FileSeek(iFileHandle,0,0);
     
     //Création de la variable dynamique pszEditText
     char *pszEditText = new char[Edit1->Text.Length()+1];
     
     iBytesRead = FileRead(iFileHandle, pszEditText, iFileLength);
     ShowMessage(pszEditText);
     
     psz = StrEnd(pszEditText);
     Edit1->Text = "";
     
     while (psz >= &pszEditText[0])
      {
        psz--;
        Edit1->Text = Edit1->Text + *psz;
      }
     delete [] pszEditText;
     
     FileClose(iFileHandle);
    }
    Cette donnée sera affichée dans un TEdit.
    Pouvez vous m'aider à résoudre mon problème ...

    Et d'avance à Tous...

  2. #2
    Membre éprouvé
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Par défaut
    Bonsoir,
    Sous reserve d'avoir bien compris, le code suivant n'affiche qu'une partie du contenu du fichier en fonction de ce qui est saisi dans le TEdit juste avant :
    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
     
     int iFileHandle;
     int iFileLength;
     int iBytesRead;
     char *psz;
     
     
     iFileHandle = FileOpen("C:\\test.txt", fmOpenRead);
     iFileLength = FileSeek(iFileHandle,0,2);
     
     FileSeek(iFileHandle,0,0);
     
     //Création de la variable dynamique pszEditText
     char *pszEditText = new char[iFileLength+1];
     
     //on determine le nomre d'élément devant être affichés
     int borne = StrToInt(Edit1->Text);
     
     iBytesRead = FileRead(iFileHandle, pszEditText, iFileLength);
     
     Edit1->Text = "";
     
     for (int i = 0; i < borne; i ++)
     {
     Edit1->Text = Edit1->Text + pszEditText[i];
     }
     
     delete [] pszEditText;
     
     FileClose(iFileHandle);
    En espérant t'aider,
    @ +



    ps : j'aime bien le code que tu as posté : il écris a l'envers !
    un rien m'amuse moi ... un vrai gamin.

  3. #3
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonsoir
    tu te complique un peu la vie pour l'écriture et la lecture de structure de type quelquonque dans un fichier
    tu trouveras ci-dessous un petit exemple
    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
     
    // ecriture
    int fileHAndle=FileCreate("c:\\poussin.txt"); // création du fichier
       ZeroMemory((void*)&Nais,sizeof(Nais)); // mise a 0 de la variable statique de type poussin
       StrCopy (Nais.Pous1,"1234");// on écrit le 1 er élément de la structure
       StrCopy (Nais.Pous2,"5678"); // on éctit le 2 élément de la structure
       // attention au dépassement de capacité
       FileWrite(fileHAndle,&Nais,sizeof(Nais));// écriture dans le fichier
       FileClose(fileHAndle);// fermeture du fichier
     
    // lecture
    Poussin* mPoussin= new  Poussin();  // création d'une variable dynamique
    	 int iFileHandle=FileOpen("c:\\poussin.txt",fmOpenRead);  // on ouvre le fichier
    	 int Recnr=FileSeek(iFileHandle,0,2)/sizeof(Poussin); // calcul du nombre de record
    	 FileSeek(iFileHandle,0,0);  // on se positionne au début du fichier
    	 for(int n=0;n<Recnr;n++)
    	 {
    	 ZeroMemory((void*)mPoussin,sizeof(Poussin));
    	 FileRead(iFileHandle,mPoussin,sizeof(Poussin));
    	 Edit1->Text=mPoussin->Pous1;
    	 Edit2->Text=mPoussin->Pous2;
    	 }
    	 delete mPoussin;  // destruction de la variable dynamique
    	 FileClose(iFileHandle); // fermeture du fichier
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Par défaut
    Bonjour à Tous,

    Je vais étudier vos solutions pour mise en application...

    encore une fois pour votre aide....

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Par défaut
    Bonjour à Tous,

    La fonction lecture fonctionne. Par contre, j'arrive pas à comprendre pourquoi
    pour la 1°occurence Edit1->Text=mPoussin->Pous1;
    et de la 2ième occurence Edit2->Text=mPoussin->Pous2;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ZeroMemory((void*)mPoussin,sizeof(Poussin));
    	 FileRead(iFileHandle,mPoussin,sizeof(Poussin));
    	 Edit1->Text=mPoussin->Pous1;
    	 Edit2->Text=mPoussin->Pous2;
    j'arrive avoir le résultat suivant
    Edit1->Text=mPoussin->Pous1 ==>Résultat Edit1->Text="12345678"
    Edit2->Text=mPoussin->Pous2 ==>Résultat Edit1->Text="5678"
    Ne devrais-je pas avoir, plutot :
    Edit1->Text=mPoussin->Pous1 ==>Résultat Edit1->Text="1234"
    Edit2->Text=mPoussin->Pous2 ==>Résultat Edit1->Text="5678"
    Pouvez-vous m'éclairer ma lanterne ?

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    bonsoir
    ceci est du à la taille des éléments de la structure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Poussin
            {
    				char Pous1[4];
    				char Pous2[4];
    		}Nais;
    Pous1 et 2 peuvent contenir 4 caractère caractère de terminaison '\0'
    compris
    Pous1 est remplis avec "1234"
    Pous2 est Rempli avec "5678"

    ceci est une erreur(Buffer overflow) car il n'y a pas la place pour le caractère de terminaison
    remède augmenter la taille de Pous1 et 2 pour qu'il puisse contenir le caractère de terminaison

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    struct Poussin
            {
    				char Pous1[5];
    				char Pous2[5];
    		}Nais;

    cordialement
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    63
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 63
    Par défaut
    Bonsoir DjmSoftware,

    Effectivement, c'est tout bête encore fallait-il y penser... (Maipulation des fichiers pas encore au point, mais on avance ...)

    C'est Totalement opérationnel

    Pour tous les explications.
    Et bonne continuation à Tous...

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

Discussions similaires

  1. Calcul depuis un fichier avec FileReader
    Par astran dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 09/05/2013, 12h39
  2. FileReader - fichier sur Windows et Mac
    Par Gueuz dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 26/11/2011, 11h51
  3. Récupérer un FileReader à partir d'un fichier stocké en ressource
    Par Julien Bodin dans le forum Entrée/Sortie
    Réponses: 1
    Dernier message: 02/09/2009, 14h43
  4. Pb FileRead fichier(bis)
    Par lenrok dans le forum C++Builder
    Réponses: 1
    Dernier message: 27/01/2007, 18h13
  5. Fichier FileReader vs FileInputSteam
    Par bonjour69 dans le forum Langage
    Réponses: 3
    Dernier message: 20/09/2006, 13h27

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