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 :

QTextStream ne lit pas le fichier


Sujet :

Qt

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Serbie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Par défaut QTextStream ne lit pas le fichier
    Salut,
    Au debut pardon de mon mauvais francais.
    J'essaie de lire un fichier de texte avec
    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
     
    #include <QtGui>
    #include <iostream>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	QCoreApplication app(argc, argv);
    	QFile file("version.txt");
    	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    	{
    		cout << "Can't open file!" << endl;
    		return 0;
    	}
    	QTextStream fs(&file);
    	while (!fs.atEnd())
    		cout << fs.readLine().toLatin1().data();
    	return app.exec();
    }
    Ca ne marche pas parce que il semble que on est toujours a la fin de fichier. Mais, si au lieu de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return app.exec();
    je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    	app.quit();
    	return 1;
    donc on a maintenant le code
    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
     
     
    #include <QtGui>
    #include <iostream>
     
    using namespace std;
     
    int main(int argc, char *argv[])
    {
    	QCoreApplication app(argc, argv);
    	QFile file("version.txt");
    	if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
    	{
    		cout << "Can't open file!" << endl;
    		return 0;
    	}
    	QTextStream fs(&file);
    	while (!fs.atEnd())
    		cout << fs.readLine().toLatin1().data();
    	app.quit();
    	return 1;
    }
    application lit tous les lignes de fichier. Pourquoi QCoreApplication::exec() ne permet pas de lire le fichier? Meme situation est avec QApplication.

  2. #2
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Voici un code fonctionnel qui prend en argument le fichier à analyser.

    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
    #include <QtCore>
     
    int main(int argc, char *argv[]) {
        enum ExitCode
        {
            Success,
            Failure
        };
     
        QTextStream errorStream(stderr);
        QTextStream standardStream(stdout);
     
        QCoreApplication app(argc, argv);
     
        QFile file(argv[1]);
     
        if (!file.open(QIODevice::ReadOnly | QIODevice::Text)) {
            errorStream << "Can't open file " << argv[1] << endl;
            return Failure;
        }
     
        QTextStream fs(&file);
     
        while(!fs.atEnd())
            standardStream << fs.readLine() << endl;
     
        return Success;
    }

  3. #3
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Salut et bienvenue,
    A mon avis :

    les deux versions on lu le fichier. La différence est ce qui se passe au niveau du cout.
    cout bufferise les donnés avant de les afficher =>
    * avec exec() : tu lance l'eventloop. Cout à bufferiser les lignes mais n'en as pas encore assez pour afficher. L'eventloop ne fait qu'attendre et rien ne se passe

    * sans exec() : tu sort du programme et cout va vider le buffer.

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Pour utiliser la console avec Qt, et donc éviter ce genre de problèmes avec cout, tu peux utiliser QDebug !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
     
    #include <QDebug>
     
     
    ....
     
     
    qDebug()<<"Ligne lue:"<<myLine ;
     
    ....

  5. #5
    Membre très actif
    Avatar de FloMo
    Homme Profil pro
    Freelance iOS
    Inscrit en
    Juillet 2004
    Messages
    726
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Freelance iOS
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2004
    Messages : 726
    Par défaut
    Citation Envoyé par Gulish Voir le message
    Pour utiliser la console avec Qt, et donc éviter ce genre de problèmes avec cout, tu peux utiliser QDebug !
    qDebug() écrit sur la sortie erreur (stderr), donc visible sous Linux et Mac, mais pas sous Windows.

    L'utilisation d'un QTextStream lié au fichier standard stdout (standard) ou stderr (erreur) permet par contre de gérer l'ensemble quelque soit la plateforme.

  6. #6
    Membre émérite

    Profil pro
    Inscrit en
    Mai 2007
    Messages
    774
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Mai 2007
    Messages : 774
    Par défaut
    Citation:
    Envoyé par Gulish
    Pour utiliser la console avec Qt, et donc éviter ce genre de problèmes avec cout, tu peux utiliser QDebug !

    qDebug() écrit sur la sortie erreur (stderr), donc visible sous Linux et Mac, mais pas sous Windows.

    L'utilisation d'un QTextStream lié au fichier standard stdout (standard) ou stderr (erreur) permet par contre de gérer l'ensemble quelque soit la plateforme.
    Il suffit d'ajouter dans le .pro.

    G.

  7. #7
    Membre averti
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Serbie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2008
    Messages : 42
    Par défaut
    Hmm, et pourquoi QTextStream::atEnd() retourne true avant de cout?
    En fait, je lis QTextStream dans un QApplication et je veux placer deux lignes de fichier aux deux QString-s. Mais parce que QTextStream::atEnd() retourne true, je ne vois aucun possibiliter de lire le fichier. Ou est le probleme, est-ce que mon utilisation de QTextStream est fausse?

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

Discussions similaires

  1. Fread ne lit pas tout le fichier
    Par jules_diedhiou dans le forum Langage
    Réponses: 1
    Dernier message: 15/07/2010, 14h49
  2. oucle qui ne lit pas la premiere ligne du fichier?
    Par areuh_fr dans le forum Langage
    Réponses: 6
    Dernier message: 22/04/2010, 09h22
  3. InternetReadFile ne lit pas les gros fichiers
    Par ValyGator dans le forum Windows
    Réponses: 6
    Dernier message: 06/11/2009, 06h55
  4. [XHTML] IE ne lit pas mon document valide
    Par Invité4 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 31/10/2004, 14h10

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