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

Qt Discussion :

Problème de lecture dans un fichier


Sujet :

Qt

  1. #1
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut Problème de lecture dans un fichier
    Bonjour, j'ai une partie de mon code qui parasite la lecture d'un fichier, qui me retourne "4" à chaque mot contenu dans le fichier.

    Toutes les personnes à qui j'ai demander jusqu'à maintenant se sont cassés les dents dessus, et c'est la seconde journée de boulot que je perd sur ce problème.

    Je remercie d'avance toutes les personnes qui m'aideront.

    Psycha

    CClientMaJ.h
    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
    #ifndef CCLIENTMAJ_H
    #define CCLIENTMAJ_H
     
    #include <QHttp>
    #include <Qurl>
    #include <QString>
    #include <QHttpRequestHeader>
    #include <QFile>
    #include <QDebug>
     
    class CClientMaJ : public QObject
    {
     
        Q_OBJECT
     
        public:
    	CClientMaJ(QUrl) ;
     
        signals :
    	void LancerComparaison() ;
    	void recommencerTelechargement() ;
    	void continuerTelechargement() ;
    	void commencerTelechargement() ;
     
        private slots :
    	void finRecuperationVersion(int) ;
    	void LaunchComparaison() ;
    	void eraseDownload() ;
    	void relaunchDownload() ;
    	void launchDownload() ;
    	void finTelechargement(int) ;
    	void majProgression(int, int) ;
     
        private:
    	QFile *f_OnisLauncher ;
    	QFile *f_NumVersionOnline ;
    	QFile *f_NumVersionLocale ;
    	QFile *f_NumVersionTemp ;
    	QFile *f_AvancementDown ;
     
    	QString *s_VersionOnline ;
    	QString *s_VersionLocale ;
    	QString *s_VersionTemp ;
     
    	QHttp *h_HttpOnis ;
    	QHttp *h_HttpVersion ;
     
    	QUrl *u_UrlOnis ;
    	QUrl *u_UrlVersion ;
     
    } ;
     
    #endif // CCLIENTMAJ_H
    CClientMaJ.cpp
    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
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    #include "CClientMaJ.h"
     
    CClientMaJ::CClientMaJ(QUrl urlDownload) : QObject()
    {
        qDebug() << "Constructeur" ;
        f_NumVersionOnline = new QFile("versionOnline.txt") ;
        f_NumVersionLocale = new QFile("versionLocale.txt") ;
        f_NumVersionTemp = new QFile("versionTemp.txt") ;
        f_OnisLauncher = new QFile("MaJOnis.exe") ;
        f_AvancementDown = new QFile("avancementTemp.txt") ;
     
        h_HttpOnis = new QHttp ;
        h_HttpVersion = new QHttp ;
     
        s_VersionOnline = new QString ;
        s_VersionLocale = new QString ;
        s_VersionTemp = new QString ;
     
        u_UrlOnis = new QUrl(urlDownload) ;
        u_UrlVersion = new QUrl("********") ; //url à risque
     
        QHttpRequestHeader headerVersion("GET", u_UrlVersion->path()) ;
        headerVersion.addValue("HOST", u_UrlVersion->host()) ;
        h_HttpVersion->setHost(u_UrlVersion->host()) ;
     
        f_NumVersionOnline->open(QIODevice::WriteOnly) ;
     
        h_HttpVersion->request(headerVersion, 0, f_NumVersionOnline) ;
     
        connect(h_HttpVersion, SIGNAL(requestFinished(int,bool)), this, SLOT(finRecuperationVersion(int))) ;
        connect(this, SIGNAL(LancerComparaison()), this, SLOT(LaunchComparaison())) ;
        connect(this, SIGNAL(recommencerTelechargement()), this, SLOT(eraseDownload())) ;
        connect(this, SIGNAL(continuerTelechargement()), this, SLOT(relaunchDownload())) ;
        connect(this, SIGNAL(commencerTelechargement()), this, SLOT(launchDownload())) ;
        connect(h_HttpOnis, SIGNAL(requestFinished(int, bool)), this, SLOT(finTelechargement(int))) ;
        connect(h_HttpOnis, SIGNAL(dataReadProgress(int, int)), this, SLOT(majProgression(int, int))) ;
        connect(h_HttpVersion, SIGNAL(dataReadProgress(int,int)), this, SLOT(majProgression(int,int))) ;
    }
     
    void CClientMaJ::finRecuperationVersion(int id)
    {
        if(id == 2)
        {
    	qDebug() << "Fin de la recuperation du numero de version online" ;
    	h_HttpVersion->close() ;
     
    	f_NumVersionOnline->close() ;
     
    	emit LancerComparaison() ;
        }
     
    }
     
    void CClientMaJ::LaunchComparaison()
    {
        qDebug() << "Lancement de la comparaison" ;
        f_NumVersionOnline->open(QIODevice::ReadOnly) ;
        f_NumVersionLocale->open(QIODevice::ReadOnly) ;
     
        s_VersionOnline->append(f_NumVersionOnline->readAll()) ;
        s_VersionLocale->append(f_NumVersionLocale->readAll()) ;
     
        f_NumVersionOnline->close() ;
        f_NumVersionLocale->close() ;
     
        qDebug() << *s_VersionOnline ;
        qDebug() << *s_VersionLocale ;
        if(*s_VersionLocale != *s_VersionOnline)
        {
    	if(f_NumVersionTemp->exists())
    	{
    	    f_NumVersionTemp->open(QIODevice::ReadOnly) ;
    	    s_VersionTemp->append(f_NumVersionTemp->readAll()) ;
    	    f_NumVersionTemp->close() ;
    	    qDebug() << *s_VersionTemp ;
    	    if(*s_VersionTemp != *s_VersionOnline)
    	    {
    		emit recommencerTelechargement() ;
    	    }
    	    else
    	    {
    		emit continuerTelechargement() ;
    	    }
    	}
    	else
    	{
    	    emit commencerTelechargement() ;
    	}
        }
     
    }
     
    void CClientMaJ::eraseDownload()
    {
        qDebug() << "Erase telechargement" ;
        f_NumVersionTemp->remove() ;
        f_OnisLauncher->remove() ;
        f_AvancementDown->remove() ;
     
        emit commencerTelechargement() ;
    }
     
    void CClientMaJ::relaunchDownload()
    {
        qDebug() << "Relancement du teléchargement" ;
     
         //
        //f_AvancementDown->open(QIODevice::ReadOnly) ;
        //* Zone du problème
     
        QFile temp("avancementTemp.txt") ;
        temp.open(QIODevice::ReadOnly) ;
        QString line = temp.readLine() ;
        qDebug() << line ;
     
        //*/// Zone du problème
       // f_AvancementDown->close() ;
       //
     
        h_HttpOnis->setHost(u_UrlOnis->host()) ;
     
        QHttpRequestHeader headerOnis("GET", u_UrlOnis->path()) ;
        headerOnis.addValue("HOST", u_UrlOnis->host()) ;
        headerOnis.setValue("Connection", "Keep-Alive");
        headerOnis.addValue("Range","") ;
     
        f_OnisLauncher->open(QIODevice::Append) ;
     
        h_HttpOnis->request(headerOnis, 0, f_OnisLauncher) ;
    }
     
    void CClientMaJ::launchDownload()
    {
        qDebug() << "Lancement du telechargement" ;
        h_HttpOnis->setHost(u_UrlOnis->host()) ;
     
        QHttpRequestHeader headerOnis("GET", u_UrlOnis->path()) ;
        headerOnis.addValue("HOST", u_UrlOnis->host()) ;
     
        f_NumVersionTemp->open(QIODevice::WriteOnly) ;
        f_NumVersionTemp->write(s_VersionOnline->toStdString().c_str()) ;
        f_NumVersionTemp->close() ;
     
        f_OnisLauncher->open(QIODevice::WriteOnly) ;
     
        h_HttpOnis->request(headerOnis, 0, f_OnisLauncher) ;
    }
     
    void CClientMaJ::finTelechargement(int id)
    {
        if(id == 5)
        {
    	qDebug() << "Fin du telechargement de Onis" ;
    	h_HttpOnis->close() ;
    	f_OnisLauncher->close() ;
    	f_NumVersionOnline->remove() ;
    	f_NumVersionTemp->remove() ;
    	f_AvancementDown->remove() ;
    	f_NumVersionLocale->open(QIODevice::WriteOnly) ;
    	f_NumVersionLocale->write(s_VersionOnline->toStdString().c_str()) ;
     
        }
    }
     
    void CClientMaJ::majProgression(int done, int data)
    {
        //qDebug() << done << "/" << data ;
        f_AvancementDown->open(QIODevice::WriteOnly) ;
        QString a ;
        a.setNum(done) ;
        QString b ;
        b.setNum(data) ;
        QString d ;
        d = a + "\r\n" + b ;
        f_AvancementDown->write(d.toStdString().c_str()) ;
        f_AvancementDown->close() ;
    }

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Peux tu préciser ou serai le problème ? Quelle fonction te retourne toujours 4 ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    Salut,
    Faudrai pas que tu le ferme ton fichier ?
    Tu dis qu'il te renvoie "4" a chaque fois, mais il contient quoi ton fichier ?

  4. #4
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    Il contient 2 lignes avec des entiers :

    1665113
    42677935

    et c'est cette zone là qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
         //
        //f_AvancementDown->open(QIODevice::ReadOnly) ;
        //* Zone du problème
     
        QFile temp("avancementTemp.txt") ;
        temp.open(QIODevice::ReadOnly) ;
        QString line = temp.readLine() ;
        qDebug() << line ;
     
        //*/// Zone du problème
       // f_AvancementDown->close() ;
       //

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    changes le "4" de la seconde ligne pour voir

  6. #6
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    Déjà essayer hier, ça change rien, à noter qu'en faisant un autre projet avec juste ces lignes, la lecture se déroule niquel, un nouveau projet avec le même code donne la même erreur.

  7. #7
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Tu veux pas utiliser une QTextStream comme mentionné dans la FAQ.

    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    QString fileName = "avancementTemp.txt";
    QFile fichier(fileName);
    fichier.open(QIODevice::ReadOnly | QIODevice::Text);
    QTextStream flux(&fichier);
    QString ligne = flux.readLine();
    PS: regarde la doc de readLine() ici je pense que le problème vient de là. Utilise QTextStream.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 51
    Points : 32
    Points
    32
    Par défaut
    errorString() te dis quelque chose ?

  9. #9
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    J'ai aussi testé hier, même résultat (le saut de ligne en moins, ce qui prouve au moins que le retour n'est pas un numéro d'erreur) .


    [Edit]
    file.errorString() me donne Unknow Error .

  10. #10
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    J'ai tester sous Windows avec VS 2008 et le fichier texte en pièce jointe le code ci-dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    	QString fileName = "avancementTemp.txt";
    	QFile fichier(fileName);
    	fichier.open(QIODevice::ReadOnly | QIODevice::Text);
    	QTextStream flux(&fichier);
    	QString ligne1 = flux.readLine();
    	QString ligne2 = flux.readLine();
    Tout fonctionne parfaitement.
    Fichiers attachés Fichiers attachés
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  11. #11
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    Oui je sais j'ai déjà fait le test.
    Du coup je me suis penché sur l'écriture du fichier (dans CClientMaJ::majProgression(int,int) ) qui se fait par le programme aussi, mais j'ai rien trouvé .

  12. #12
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Déjà essaie de lire avec le fichier que je te donne. Si la lecture marche c'est que l'écriture n'est pas correcte ou que tu as un problème de type de codec différent au niveau de la lecture et l'écriture.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  13. #13
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    J'avais aussi essayer d'écrire mon fichier à la main, changer les entier par des caractères, et ton fichier.

    Aucun changement

  14. #14
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    A mon avis il faut que tu passes entièrement par un QTextStream aussi bien pour la lecture que pour l'écriture. Essaie de valide les bouts de code étape par étape. Du genre tu crées un nouveau projet et tu fais juste la lecture et l'écriture une fois que cela fonctionne, tu intègres le tout dans ton programme. C'est ce que j'ai fait pour les lecture du fichier j'ai juste crée un fichier avec notepad et fait un projet vide qui lit le fichier et tout fonctionne sous VS 2008.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  15. #15
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    Comme précisé plus haut , les codes fonctionnent dans des nouveaux projet qui ne sont fait que pour ça.

    L'écriture en QTextStream ne change rien au problème, c'est donc bien quelque chose dans le code qui me parasite le tout.

    Je te remercie de donner de ton temps pour m'aider.

  16. #16
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Ok donc c'est bien l'intégration qui bug. Donc il faut que tu procèdes par dichotomie avec un debugger et valider des portions de ton code pour voir vraiment ce qui bug. Déjà est ce que l'écriture se fait bien ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  17. #17
    Membre régulier
    Homme Profil pro
    Développeur
    Inscrit en
    Juin 2007
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2007
    Messages : 39
    Points : 70
    Points
    70
    Par défaut
    J'ai compris mon problème, le slot de mise a jour de la progression se déclenche aussi lors de la récupération du numéro de version donc avant les comparaisons et l'émission du signal qui lance la lecture, la requête du numéro de version étant de 4 octets qui s'inscrivent dans le fichier juste avant la lecture.

    Merci

  18. #18
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Points : 1 672
    Points
    1 672
    Par défaut
    Super bon courage pour la suite.
    Ne pas oublier le bouton .
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

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

Discussions similaires

  1. [C ANSI] Problème de lecture dans un fichier
    Par F0ul dans le forum Débuter
    Réponses: 7
    Dernier message: 06/02/2008, 14h00
  2. [POI] Problème écriture/lecture dans un fichier Excel
    Par steuve dans le forum Documents
    Réponses: 6
    Dernier message: 02/07/2007, 15h47
  3. Problème de lecture dans un fichier texte.
    Par Mike888 dans le forum C
    Réponses: 3
    Dernier message: 24/05/2007, 11h45
  4. problème de lecture dans un fichier
    Par phy4me dans le forum Fortran
    Réponses: 1
    Dernier message: 20/05/2007, 20h55
  5. Problème de lecture dans un fichier xml
    Par Pyra dans le forum Langage
    Réponses: 2
    Dernier message: 18/12/2005, 00h13

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