2010-03-16 6 views
3

Je crée une petite application vb.net, et j'essaye d'écrire une liste de résultats d'un listview dans un fichier texte. J'ai regardé en ligne et trouvé le code pour ouvrir la boîte de dialogue de sauvegarde et écrire le fichier texte. Lorsque je clique sur Enregistrer dans la boîte de dialogue Enregistrer le fichier, je reçois une IOException avec le message "Le processus ne peut pas accéder au fichier C: \ thethe.txt" car il est utilisé par un autre processus. " Le fichier texte est créé à l'emplacement correct, mais est vide. L'application se ferme à cette ligne "Dim fs comme nouveau FileStream (saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write)" Merci d'avance pour toute aide.créer et écrire dans un fichier texte dans vb.net

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 
    Dim myStream As Stream 
    Dim saveFileDialog1 As New SaveFileDialog() 

    saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" 
    saveFileDialog1.FilterIndex = 2 
    saveFileDialog1.RestoreDirectory = True 

    If saveFileDialog1.ShowDialog() = DialogResult.OK Then 
     myStream = saveFileDialog1.OpenFile() 
     If (myStream IsNot Nothing) Then 
      Dim fs As New FileStream(saveFileDialog1.FileName, FileMode.OpenOrCreate, FileAccess.Write) 
      Dim m_streamWriter As New StreamWriter(fs) 
      m_streamWriter.Flush() 
      'Write to the file using StreamWriter class 
      m_streamWriter.BaseStream.Seek(0, SeekOrigin.Begin) 
      'write each row of the ListView out to a tab-delimited line in a file 
      For i As Integer = 0 To Me.ListView1.Items.Count - 1 
       m_streamWriter.WriteLine(((ListView1.Items(i).Text & vbTab) + ListView1.Items(i).SubItems(0).ToString() & vbTab) + ListView1.Items(i).SubItems(1).ToString()) 
      Next 
      myStream.Close() 
     End If 
    End If 

End Sub 

Répondre

5

Essayez de simplifier et d'utiliser un StreamWriter à la place:

Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click 

     Dim saveFileDialog1 As New SaveFileDialog() 

     saveFileDialog1.Filter = "txt files (*.txt)|*.txt|All files (*.*)|*.*" 
     saveFileDialog1.FilterIndex = 2 
     saveFileDialog1.RestoreDirectory = True 

     If saveFileDialog1.ShowDialog() = DialogResult.OK Then 
      Using sw As New IO.StreamWriter(saveFileDialog1.FileName, False) 
       'write each row of the ListView out to a tab-delimited line in a file 
       For i As Integer = 0 To Me.ListView1.Items.Count - 1 
        sw.WriteLine(((ListView1.Items(i).Text & vbTab) + ListView1.Items(i).SubItems(0).ToString() & vbTab) + ListView1.Items(i).SubItems(1).ToString()) 
       Next 
      End Using 
     End If 

    End Sub 
+0

Cela fonctionne très bien. Merci beaucoup. – Zachary

5

Vous avez déjà ouvert un flux vers le fichier en utilisant SaveFileDialog.OpenFile - mais vous essayez d'ouvrir un autre flux en même temps avec cette ligne:

Dim fs As New FileStream(...) 

Pourquoi ne pas utiliser le flux que vous avez? (Ou ne pas appeler OpenFile.)

(BTW, une déclaration Using pourrait vous aider à nettoyer votre handles de fichiers, même si une exception est levée.)

1

Vous avez un processus en cours d'exécution qui n'a pas publié correctement la ressource. Peut-être votre débogueur?

[EDIT] Désolé, j'ai mal lu l'exemple de code ...

Questions connexes