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

Discussion :

[QXmlStreamWriter] Gestion des erreurs

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Mars 2004
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 291
    Par défaut [QXmlStreamWriter] Gestion des erreurs
    Bonjour à tous,

    j'aimerai gérer les erreurs potentiels d'écriture avec QXmlStreamWriter.
    Mais je ne vois rien qui me permette de faire cela.

    Je peux juste contrôler la bonne ouverture de mon fichier, c'est tout.

    Quelqu'un pourrait m'aiguiller ?

    En gros, améliorer l'exemple de la FAQ par exemple :
    http://qt.developpez.com/faq/?page=SAX#QXmlSTreamWriter

  2. #2
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Il ne peut pas y avoir d'erreur liées à QXmlStreamWriter je pense, ça "write" tout un tas de choses à partir de QString donc je comprends qu'il n'y ait pas de gestion d'erreur.

    Après peut-être que tu peux utiliser systématiquement errorString() pour vérifier si tout s'est bien passé (renvoie chaine vide) ? Si le fichier de sorti peut facilement être sujet à des erreurs (modifications sans prévenir pendant que t'écris), tu devrais plutôt "write" dans une QString, et écrire d'un coup cette QString dans le fichier une fois que c'est fini.

  3. #3
    Membre éclairé
    Inscrit en
    Mars 2004
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 291
    Par défaut
    Bonjour Troudhyl,

    Merci. Effectivement, il y a QXmlStreamWriter ( QString * string ).
    Du coup, j'ai suivi tes conseils. Voici un code sur ce que je fais maintenant (issue d'un extrait de la fonctionnalité "Enregistrer/Enregistrer sous") :

    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
        QFile file(fileName);
        QFile fileOld(ancienNomFichier);
     
        if(!fileOld.open(QFile::ReadOnly | QFile::Text)) {
            QMessageBox::critical(this,"ERREUR","LECTURE - Le diagnostic n'est pas accessible."+ancienNomFichier);
            return ;
        }
     
        QByteArray byteArray_sauvegardeContenuFichier(fileOld.readAll());
        fileOld.close();
     
        QFileInfo fileInfo(file);
        // Ouverture du fichier en écriture et en texte.
        if(!file.open(QFile::WriteOnly | QFile::Text)) {
            QMessageBox::critical(this,"ERREUR","ECRITURE - Le diagnostic n'est pas accessible." + fileName);
            return ;
        }
     
    //QXmlStreamWriter writer(&file);
        QString contenuXml("");
        QXmlStreamWriter writer(&contenuXml);
     
     
    ... //ici on écrit le contenu XML
     
        if(file.write(contenuXml.toUtf8()) == -1) {
            //si on détecte des erreurs, on pourrait réinjecter l'ancien contenu :
            file.write(byteArray_sauvegardeContenuFichier);
            QMessageBox::critical(this,"ERREUR","Erreur d'écriture du fichier");
        }
    Si l'écriture dans le fichier échoue, a-t-il déjà effacé les données qu'ils contenaient ou pas ? Si non, je n'ai pas à réinjecter les données (enlever l'instruction dans le dernier if). Si oui, je les réinjecte.

    Qu'en penses-tu ?

  4. #4
    Membre Expert

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2009
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2009
    Messages : 1 009
    Par défaut
    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    file.open(QFile::WriteOnly...
    L'ouverture en WriteOnly modifie immédiatement le fichier en le vidant. Si tu débug pas à pas tu peux le constater. Tu peux l'ouvrir en ReadWrite pour éviter ça, et tu n'auras qu'une seule modification du fichier, au close().

  5. #5
    Membre éclairé
    Inscrit en
    Mars 2004
    Messages
    291
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 291
    Par défaut
    Oui exact.

    Merci encore, j'ai modifié le code, pas besoin de faire une sauvegarde du contenu avant ouverture.

    Bonne fin de journée.

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

Discussions similaires

  1. [FB] Gestion des erreurs et application francophone
    Par Benjamin GAGNEUX dans le forum Installation
    Réponses: 10
    Dernier message: 20/05/2006, 14h54
  2. [struts][Datasource]Gestion des erreurs
    Par GreenJay dans le forum Struts 1
    Réponses: 8
    Dernier message: 15/09/2004, 16h51
  3. [VB6] Gestion des erreurs dans une dll
    Par zimba-tm dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 02/08/2004, 11h20
  4. [XSLT]Est ce qu'il y'a la gestion des erreur en xslt ?
    Par miloud dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/02/2004, 17h19
  5. [LG]gestion des erreurs
    Par frontin dans le forum Langage
    Réponses: 3
    Dernier message: 29/11/2003, 22h41

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