2009-08-25 13 views
1

Bonjour tous,IOException DataGridView écriture dans le fichier texte C#

Je vais avoir quelques problèmes avec une méthode dans mon code C# qui devrait permettre à un DataGridView être enregistré dans un fichier txt.

Le code est comme ci-dessous:

private void saveToTxt_Btn_Click(object sender, EventArgs e) 
    { 
     filenameText.Text = serviceDataGrid.Rows.Count.ToString(); 
     //string toOutFile = @"C:\" + filenameText.Text+".txt"; 
     string toOutFile = @"C:\hello.txt"; 

     FileStream toFile = new FileStream(toOutFile, FileMode.Create); 

     TextWriter toText = new StreamWriter(toOutFile); 

     int count = serviceDataGrid.Rows.Count; 

     toText.WriteLine("\t\t" + filenameText.Text); 
     toText.WriteLine("\t\t" + directoryText.Text+"\n\n"); 

     for (int row = 0; row < count-1; row++) 
     { 
      toText.WriteLine(serviceDataGrid.Rows[row].Cells[0].Value.ToString()); 
     } 
     toText.Close(); 
     toFile.Close(); 
    } 

La ligne suivante retourne l'erreur:

TextWriter toText = new StreamWriter(toOutFile); 

IOException was unhandled. The process cannot access the file 'C:\hello.txt' because it is being used by another process.

Je ne suis pas tout à fait sûr de ce que le problème, mais il suggère il y a des conflits entre FileStream et TextWriter.

Quelqu'un peut-il faire la lumière là-dessus? Cordialement

Répondre

4

Vous l'ouvrez deux fois; perdre tous les trucs toFilecomplètement et utiliser using autour toText:

using(TextWriter toText = File.CreateText(toOutFile)) 
    { 
     toText.WriteLine("\t\t" + filenameText.Text); 
     toText.WriteLine("\t\t" + directoryText.Text+"\n\n"); 

     foreach(DataGridViewRow row in serviceDataGrid.Rows) 
     { 
      toText.WriteLine(row.Cells[0].Value.ToString()); 
     } 
    } 

aussi; Voulez-vous vraiment dire WriteLine(... + "\n\n")?

+0

Cela fonctionne parfaitement. Merci beaucoup. WriteLine (.. + "\ n \ n"); ne s'est pas comporté comme je l'avais imaginé, donc je l'ai dit, mais ça n'a pas marché (comme je suppose que vous le saviez déjà) :) – Ric

1

Lorsque vous utilisez la ligne

TextWriter toText = new StreamWriter(toOutFile); 

la ligne suivante est pas nécessaire, parce que le constructeur StreamWriter (chaîne filePath) va créer un fichier si elle n'existe pas.

FileStream toFile = new FileStream(toOutFile, FileMode.Create); 

Et Marc a raison, vous avez déjà ouvert le fichier une fois dans une autre instance, vous ne pouvez pas ouvrir à nouveau.

0

J'ai supervisé que vous ouvrez l'écrivain avec le nom de fichier. Je pensais que vous l'avez fait TextWriter toText = new StreamWriter (toFile);

Questions connexes