Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de lecture d'un fichier .txt

Problème de type de variable?

Sujet résolu
    7 août 2008 à 9:35:03

    Bonjour à tous, Comme le dit le titre, j'ai un petit problème lors de la relecture d'un fichier .txt avec un TFileStream.

    Voici le code qui me permet d'écrire mon fichier texte, je le met simplement à titre d'information, je n'ai aucun problème avec :

    {
    char *data = MemoMsg->Text.c_str();
    MemoMsg->Text.Length();
    AnsiString testName = (AnsiString)(TabMsg->TabIndex) + "_message.txt";       //Nom du fichier
    test = new TFileStream(testName, fmCreate);                                  //Création du fichier
    test->WriteBuffer(data, MemoMsg->Text.Length());                             //Sauvegarde du texte
    delete test;
    MemoMsg->Clear();
    }
    


    Ce code me permet de sauvegarder un texte dans dans un fichier nommé <index de la Tab>_message.txt.

    Mon problème arrive lorsque je veux relire mon fichier. Voici le code que j'utilise :

    {
    char data[10];
    char *readData = data;
    MemoMsg->Text.Length();
    AnsiString testName = (AnsiString)(TabMsg->TabIndex) + "_message.txt";
    test = new TFileStream(testName, fmCreate);
    test->Read(readData, 10);
    MemoMsg->Text = data;
    delete test;
    }
    


    Bon déjà je sais que ce code me permet de lire simplement les 10 premier bits du fichier, j'ai écris ceci affin de tester mon code. Le problème c'est que je me retrouve avec des caractères qui n'ont rien à voire avec ceux sauvés dans mon fichier. Je pense que c'est un problème de variable, mais je ne suis pas sûr.
    Mon deuxième problème est que la fonction Read(readData, 10); ne me permet pas de lire un nombre indéfinie de bit. D'après la doc, cette fonction devrait pouvoir le faire, mais si j'enlève le deuxième paramètre qui est le nombre de bit à lire, j'ai une erreur de compilation.
    Un petit coup de pouce à me donner?

    Merci de vos futur réponse!

    Benjamin

    • Partager sur Facebook
    • Partager sur Twitter
      7 août 2008 à 9:47:09

      Tu utilises quelle bibliothèque ?
      • Partager sur Facebook
      • Partager sur Twitter
      Co-auteur du cours de C++. ||| Posez vos questions sur le forum ||| Me contacter.
        7 août 2008 à 9:59:26

        Je travail avec C++ builder 6 et j'utilise les composants Raise et la VCL.

        J'ai réussi à ne plus avoir les caractères, j'avais oublié d'initialisé ma variable, voici mon nouveau code :

        char data[100] = {NULL};
        char *readData = data;
        MemoMsg->Text.Length();
        AnsiString testName = (AnsiString)(TabMsg->TabIndex) + "_message.txt";
        test = new TFileStream(testName, fmCreate);
        test->Read(readData, 100);
        MemoMsg->Text = data;
        delete test;
        


        J'ai augmenté la taille de mon char, mais la fonction read ne modifie pas mon char data, après être passé dans la fonction, tout les caractère on pour valeur \0. D'où vient mon problème?

        EDIT :

        Voici la documentation de la fonction read :

        Reads up to Count bytes of data from the resource associated with the handle stream into Buffer.

        virtual int __fastcall Read(void *Buffer, int Count);

        Description

        Use Read to read data from the resource associated with the handle stream when the number of bytes in the file is not known. Read transfers up to Count bytes from the resource, starting at the current position, and then advances the current position in the resource by the number of bytes actually transferred. Read returns the number of bytes actually transferred, which may be less than Count if the end of file marker is encountered.

        All other data-reading methods of a handle stream (ReadBuffer, ReadComponent) call Read to do the actual reading.





        RE EDIT :

        C'est bon j'ai résolue mon problème... Je met mon code source pour tout ceux que sa intéresse :

        void __fastcall TMyMessengerClient::TabMsgChange(TObject *Sender)
        {
                        mReadFileName = "message/" + (AnsiString)(TabMsg->TabIndex) + "_message.txt";
                        mMsgFile = new TFileStream(mReadFileName, fmOpenRead);
                        char mReadMsgFileBuffer[1] = {NULL};
                        AnsiString chaineDeConversion = "";
                        AnsiString BitDeConversion = "";
                        for (int i = 0; i < mMsgFile->Size; i++)
                        {
                                mMsgFile->ReadBuffer(mReadMsgFileBuffer,1);
                                if (mReadMsgFileBuffer == "\eof")
                                        continue;
                                BitDeConversion = (AnsiString)(mReadMsgFileBuffer[0]);
                                chaineDeConversion += BitDeConversion;
                                //MemoMsg->Text = MemoMsg->Text + (AnsiString)(mReadMsgFileBuffer);
                        }
                        MemoMsg->Text = chaineDeConversion;
                        chaineDeConversion = "";
                        delete mMsgFile;
                        mMsgFile = NULL;
                        mReadFileName = "";
        
        }
        //---------------------------------------------------------------------------
        
        void __fastcall TMyMessengerClient::TabMsgChanging(TObject *Sender,
              int NewIndex, bool &AllowChange)
        {
                        char *writeMsgFileBuffer = new char[ MemoMsg->Text.Length() + 1];
                        StrCopy(writeMsgFileBuffer, MemoMsg->Text.c_str());
                        mWriteFileName = "message/" + (AnsiString)(TabMsg->TabIndex) + "_message.txt";
                        mMsgFile = new TFileStream(mWriteFileName, fmOpenWrite);
                        mMsgFile->WriteBuffer(writeMsgFileBuffer, MemoMsg->Text.Length());
                        delete mMsgFile;
                        mMsgFile = NULL;
                        MemoMsg->Clear();
                        mWriteFileName = "";
        }
        //---------------------------------------------------------------------------
        


        Je gère la création et la supressions du dossier et des fichiers dans le constructeur/destructeur!



        • Partager sur Facebook
        • Partager sur Twitter

        Problème de lecture d'un fichier .txt

        × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
        × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
        • Editeur
        • Markdown