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