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 :

[C#] Copie d'une listview dans un fichier


Sujet :

C#

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut [C#] Copie d'une listview dans un fichier
    Bonjour,
    je suis débutant en C#, et j'aimerai enregistrer une listview dans un fichier. Mais je ne sais pas du tout par où commencer, j'ai recherché sur le forum et j'ai trouvé le code suivant, que j'ai tenté d'adapter :
    //Collection contenant les éléments de la liste
    ListView.ListViewItemCollection Liste = lv_prodfr.Items;
    StreamWriter sw = File.AppendText("path.txt");
    foreach (ListViewItem item in Liste)
    {
    sw.WriteLine(item.Text);
    }
    Mais cela ne marche pas, je suis un peu dans le flou, si quelqu'un pourai me donner des pistes où chercher pour enregistrer une listview dans un fichier.

    Merci

  2. #2
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Qu'est ce qui ne marche pas ?
    Tu as une erreur ?
    Les données ne sont pas écrits dans le fichier ?
    Qu'est ce que lv_prodfr ?

    Sinon je dirais que la méthode est la bonne. Récupéré les items de ta liste et copié leur champs texte dans un fichier c'est ce qu'il faut faire.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut
    Je n'ai pas d'erreur, mais mon fichier "path" est bien créer mais il est vide. Et je me pose une question aussi, est ce que les subitems sont pris automatiquements où je dois rajouter une collection de subitems a chaque items?

    lv_prodfr est ma ListView

  4. #4
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Heu juste une chose, comme tu nas pas mit la fin du script, je me suis dit que tu avais automatique ment fait ceci après le boucle :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    sw.flush();
    sw.close();
    Est ce le cas ?

    Si oui, vérifie avec le debugger que les propriétés Text des Items conitennent bien du texte.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut
    J'avais oublié de mettre:
    sw.close();

    Mais la en reprennant la source sur un autre post je suis arrivé à cela :

    //Collection contenant les éléments de la liste
    ListView.ListViewItemCollection Liste = lv_prodfr.Items;
    using (StreamWriter sw = new StreamWriter(saveFile.FileName))
    //saveFile est un SaveFileDialogue
    {
    foreach (ListViewItem item in Liste)
    {
    sw.WriteLine(item.Text);
    }
    sw.close();
    }
    La ça marche met items sont inscrit dans le fichier choisi par l'utilisateur.

    Mais peut tu m'expliquer pour quoi ça marche avec :

    using (StreamWriter sw = new StreamWriter(saveFile.FileName))
    et pas avec

    StreamWriter sw = new StreamWriter(saveFile.FileName)
    quel role joue le using ici?

  6. #6
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Par défaut
    Pour bien comprendre cela regarde les docs comme la FAQ sur le point concernant les méthodes anonymes.
    Using permet de créer des méthodes anonymes, c'est à dire, quelque part dans ton code tu va créer un méthode sans nom, à laquelle tu peux passer des paramètres et qui correspond en gros au code mis entre les cochets.
    Il est sensé être utilisé pour éviter de créer des méthodes "bidon" qui ne sont utilisés qu'une seule fois.
    Personnelement je n'utilise pas le using (en dehors de using System ...)

    Si je me souviens bien le using prends en charge la destruction des objets créés dans le using.
    Je pense que là cette destruction fait appel au par avant à la méthode close du StreamWriter.

    Autre chose, avant le sr.close() fait un sr.flush()
    Cela permet de vider la mémoire tampon du flux, en effet si tu ne le fait pas, tu pourrais perdre quelque caractères qui se trouvent encore dans la mémoire tampon et qui n'ont donc pas été écrit dans le fichier.

    Une dernière chose : utilise le bouton citation pour les citations et le bouton code (#) pour le code

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 8
    Par défaut
    Ok merci pour ces précisions, je vais aussi allé voir la faq.

    J'ai résolut mon problème, je me le code si ça peut aider quelqu'un plutard :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
                    //Collection contenant les éléments de la liste
                    ListView.ListViewItemCollection Liste = lv_prodfr.Items;
                    using (StreamWriter sw = new StreamWriter(saveFile.FileName))
                    {
                        foreach (ListViewItem item in Liste)
                        {
                          // les "-" sont là pour pouvoir exploiter le fichier dans d'autre méthodes avec un Split
                            sw.WriteLine(item.SubItems[0].Text + "-" + item.SubItems[1].Text + "-" + item.SubItems[2].Text + "-" + item.SubItems[3].Text);
                        }
                        sw.Flush();
                        sw.Close();
                    }
    Merci ced600

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

Discussions similaires

  1. [Débutant] Enregistrer les items d'une listview dans un fichier XML
    Par NABZ27 dans le forum C#
    Réponses: 0
    Dernier message: 22/10/2014, 16h37
  2. Réponses: 1
    Dernier message: 01/06/2014, 13h15
  3. [XL-2003] VBA - Copie d'une feuille dans un fichier Texte
    Par cycy75 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 12/02/2010, 15h38
  4. Copie d'une édition dans un fichier
    Par AAWOOPY56 dans le forum AIX
    Réponses: 0
    Dernier message: 08/01/2010, 08h56
  5. [VBA Excel] Copie d'une feuille dans un autre fichier
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 10h35

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