IOException при записи DataGridView в текстовый файл C # - PullRequest
1 голос
/ 25 августа 2009

Доброе утро всем,

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

Код следующий:

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 не было обработано. Процесс не может получить доступ к файлу «C: \ hello.txt», поскольку он используется другим процессом.

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

Кто-нибудь может пролить свет на это? Привет

Ответы [ 3 ]

4 голосов
/ 25 августа 2009

Вы открываете его дважды; потерять все 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")?

1 голос
/ 25 августа 2009

Когда вы используете линию

TextWriter toText = new StreamWriter(toOutFile);

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

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

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

0 голосов
/ 25 августа 2009

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

...