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 :

SaveFileDialog et StreamWriter


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut SaveFileDialog et StreamWriter
    Bonjour à tous,
    J'ai un problème avec une fonction qui me permet d'exporter le contenu de mon ListView dans un fichier CSV.
    J'utilise un menustrip, avec un toolstripmenuitem (Exporter en CSV).
    Lorsque je clique dessus, un SaveFileDialog s'ouvre et quand j'enregistre après avoir indiqué un nom de fichier, j'ai une erreur IOException.
    Le processus ne peut pas accéder au fichier 'C:\nomdufichier.csv', car il est en cours d'utilisation par un autre processus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    using (StreamWriter sw = new System.IO.StreamWriter(saveFileDialog1.FileName, false, System.Text.Encoding.Default))
    Avez vous des conseils pour régler le problème ?
    Merci

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    vu comme ca, ton code à l'air d'etre bon.

    1) as tu ouvert le fichier dans un autre programme, genre notepad? => ferme le
    2) as tu d'autre stream toujours calés sur ton fichier? il faut que tu les ferme avant de pouvoir créer ton StreamWriter.

    EDIT : tiens au passage, ca m'amene à une question. Si une exception est levée à l'interrieur de ton using, est ce que l'objet sera vraiment Disposed..?...

    Perso, je fais toujours comme ca:
    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
    Streamwriter writer = null;
    try
    {
       writer = new blablabla
    }
    catch() //Je le laisse vide sauf si besoin est
    {}
    finally
    {
       if(writer != null)
       {
          writer.Close();
          writer.Dispose();
          writer = null;
       }
    }

  3. #3
    Max
    Max est déconnecté
    Expert confirmé

    Avatar de Max
    Homme Profil pro
    Artisan développeur
    Inscrit en
    Mai 2007
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Artisan développeur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2007
    Messages : 2 954
    Par défaut
    Citation Envoyé par giova_fr Voir le message
    tiens au passage, ca m'amene à une question. Si une exception est levée à l'interrieur de ton using, est ce que l'objet sera vraiment Disposed..?...
    Oui, et c'est d'ailleurs tout l'intérêt du mot clé using, ça t'évite d'écrire un gros bloc try / catch / finally

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut
    Tssss j'avais Excel ouvert, donc forcément...
    Par contre, dans l'ordre, je ferme le StreamWriter et je dispose le SaveFileDialog :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    sw.Close();
    saveFileDialog1.Dispose();
    Au fait dans mon fichier Excel, tout les éléments sont sur une colonne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    foreach (ListViewItem item in UserView.Items)
    {
          foreach (ListViewItem.ListViewSubItem subitem in item.SubItems)
          {
                sw.Write(string.Format("{0};", subitem.Text));
                sw.WriteLine("");
          }
    }
    Item;
    SubItem;
    SubItem;
    Item;
    SubItem;
    SubItem;

    Quelqu'un a une idée pour afficher ligne par ligne ?
    Item; SubItem; SubItem
    Item; SubItem; SubItem

  5. #5
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juin 2005
    Messages
    700
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Juin 2005
    Messages : 700
    Par défaut
    Par contre, dans l'ordre, je ferme le StreamWriter et je dispose le SaveFileDialog :
    Je pense que c'est effectivement comme ca qu'il faut faire : en modeLOFC (Last Opened First Closed)

    En tout cas, je fais tout le temps comme ca avec les objets à disposer, et je n'ai encore jamais eu de probleme. D'ailleur, je crois qu'un Dispose sur une Form fait tout d'abord un dispose sur tous les controles de la form en premier... (à confirmer).

    Quelqu'un a une idée pour afficher ligne par ligne ?
    Pas sur de te suivre. Je dirais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    foreach (ListViewItem item in UserView.Items)
    {
          String line = item.Text;
          foreach (ListViewItem.ListViewSubItem subitem in item.SubItems)
          {
                line +=String.Format("; {0}",subitem.Text);
          }
          sw.WriteLine(line);
          sw.Flush();
     
    }

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2010
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2010
    Messages : 125
    Par défaut
    Merci à toi

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

Discussions similaires

  1. [C#]Equivalent de SaveFileDialog pour webform
    Par Giill dans le forum ASP.NET
    Réponses: 4
    Dernier message: 05/04/2007, 09h43
  2. StreamWriter et StreamReader
    Par robert.michel9 dans le forum Delphi .NET
    Réponses: 3
    Dernier message: 26/12/2005, 11h26
  3. Réponses: 5
    Dernier message: 22/12/2005, 15h26
  4. Réponses: 5
    Dernier message: 27/04/2005, 16h49
  5. [VB.NET] Écriture par colonne streamwriter...?
    Par Pleymo dans le forum Windows Forms
    Réponses: 5
    Dernier message: 15/04/2005, 15h32

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