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# Discussion :

Fichier XML barré


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut Fichier XML barré
    Bonjour
    J'ai une liste de CD (considéré comme classe), avec des champs ordinaires
    (compositeur, interprete, orchestre,etc..)
    Je sérialise la liste dans un fichier XML,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
           XmlSerializer serialiseur = new XmlSerializer(typeof(List<Cd>));
    FileStream stream = new FileStream(@"C:\..\Cd.xml",FileMode.OpenOrCreate);
                    stream.Position = 0;
                    serialiseur.Serialize(stream, CdListe);
    mon problème est que quand je ferme mon application, et plus tard la rouvre pour enregistrer un nouveau CD, le fichier XML contient, là où je m'étais arrêté au dernier enregistrement,
    Ce qui fait qu'à la déserialisation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    FileStream stream = new FileStream(@"C:\Users\..\Cd.xml",FileMode.Open);
                    stream.Position = 0;
    List<Cd> Liste = (List<Cd>)serialiseur.Deserialize(stream);
    seule la moitié du fichier XML est prise en compte. Comment ajouter un enregistrement sans cet inconvénient?

  2. #2
    Membre chevronné
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2011
    Messages : 610
    Par défaut
    Salut,

    Essai de positionner le curseur au début du fichier avant la fermeture du flux.
    La moitié du fichier XML?? Je pense que la structure de ton XML est à revoir...

    Edit: Pour revenir en début de fichier utilise la méthode Seek de FileStream

  3. #3
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2010
    Messages
    148
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2010
    Messages : 148
    Par défaut
    Salut,

    je ne sais pas si j'ai bien compris mais je pense qu'il faut que tu déserialises à l'ouverture de ton application et que tu travail avec la liste généré.

  4. #4
    Membre éclairé
    Avatar de Etanne
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2003
    Messages
    469
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Haut Rhin (Alsace)

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 469
    Par défaut
    Bonjour,

    Quelques questions :
    • As tu mis le stream.Close() après l'appel de Serialize et Deserialize ?
    • Peux tu nous montrer à quoi ressemble ton fichier XML ?
    • Vérifies que le fichier que tu utilises à la sérialisation et désérialisation soit le même (on ne sait jamais)


    Pour info (mais pas essentiel), tu peux supprimer le "stream.Position = 0"

    Etanne

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite
    La position du curseur ne semble pas en cause. Pour être compris voici ce que donne le fichier XML. Aprés fermeture puis nouvel enregistrement
    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
    <?xml version="1.0"?>
    <ArrayOfCD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
      <Cd>
        <titre />
        <opus>K 005 / 5a / Allegro en Do majeur pour Clavecin / Ete 1763 / </opus>
        <interpretes />
        <direction />
        <orchestre />
        <chefChoeurs />
        <choeurs />
        <dateEnregistrement />
        <lieuEnregistrement />
        <edition />
      </Cd>
    </ArrayOfCD></ArrayOfCD>/>  
        <opus>K 013 / 13 / Sonate en Fa majeur pour Clavecin, Violon (ou Flute) et Violoncelle / 1764 / Londres</opus>
        <interpretes />
        <direction />
        <orchestre />
        <chefChoeurs />
        <choeurs />
        <dateEnregistrement />
        <lieuEnregistrement />
        <edition />
      </Cd>
      <Cd>
        <titre />
        <opus>K 271 / 271a / Concerto pour violon No. 7 (incertain) / 1777? / Salzbourg</opus>
        <interpretes />
        <direction />
        <orchestre />
        <chefChoeurs />
        <choeurs />
        <dateEnregistrement />
        <lieuEnregistrement />
        <edition />
      </Cd>
    </ArrayOfCD>
    Il y a au milieu </ArrayOfCD> qui vient couper le fichier XML en deux.

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    118
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 118
    Par défaut suite et fin
    J'ai trouvé une solution indigne
    J'efface à chaque enregistrement le fichier XML et je le reconstitue complété.
    Quand j'aurai 150 000 enregistrements j'aurais le temps d'aller boire un thé

  7. #7
    Inactif  
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Janvier 2007
    Messages
    6 604
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Janvier 2007
    Messages : 6 604
    Par défaut
    Et pourquoi utiliser un fichier XML dans ce cas ? cela me semble largement sous optimal comme choix. Une base in-process(Sql CE, SqlIte, etc ....) serait a priori plus adaptée vu la quantité de données.

Discussions similaires

  1. Préchargement d'un fichier XML avec barre de progression
    Par arnolem dans le forum Téléchargez
    Réponses: 0
    Dernier message: 30/09/2011, 16h49
  2. Recuperation du fichier xml
    Par Geulderack dans le forum XMLRAD
    Réponses: 10
    Dernier message: 28/02/2003, 11h06
  3. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 15h22
  4. [Kylix] Composant IBM pour fichiers XML
    Par Mister Nono dans le forum EDI
    Réponses: 1
    Dernier message: 29/09/2002, 20h28
  5. Balises HTML dans un fichier XML
    Par Bastet79 dans le forum XML/XSL et SOAP
    Réponses: 12
    Dernier message: 04/09/2002, 15h29

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