2009-08-25 4 views
1

Доброе утро всем,IOException на DataGridView писать в текстовый файл C#

У меня несколько проблем с методом в моем C# код, который должен позволить DataGridView быть сохранен в текстовый файл.

код, как показано ниже:

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(); 
    } 

Следующая строка возвращает ошибку:

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.

Я не совсем уверен, что проблема есть, но она бы предположить, существуют конфликты между FileStream и TextWriter.

Можно ли пролить свет на это? С уважением

ответ

4

Вы открываете его дважды; потерять все toFile вещи полностью и использовать using вокруг 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()); 
     } 
    } 

Также; Вы действительно имеете в виду WriteLine(... + "\n\n")?

+0

Это работает безупречно. Огромное спасибо. WriteLine (.. + "\ n \ n"); не вел себя так, как я себе представлял, поэтому я это имел в виду, но это не сработало (как я предполагаю, вы уже знали) :) – Ric

1

При использовании линии

TextWriter toText = new StreamWriter(toOutFile); 

следующая строка не требуется, так как StreamWriter (строка Filepath) конструктор создаст файл, если он не существует.

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

И Марк прав, у вас уже есть файл, открытый один раз в переменной другого экземпляра, вы не можете открыть его снова.

0

Я наблюдал за тем, что вы открываете автора с именем файла. Я думал, что вы сделали TextWriter toText = новый StreamWriter (toFile);