1

大家早上好,

我的 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 之间存在冲突。

任何人都可以对此有所了解吗?问候

4

3 回答 3

4

您打开它两次;完全失去所有的toFile东西,并在周围使用:usingtoText

    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")吗?

于 2009-08-25T11:05:30.807 回答
1

当您使用线路时

TextWriter toText = new StreamWriter(toOutFile);

以下行不是必需的,因为 StreamWriter(string filePath) 构造函数将创建一个文件,如果它不存在。

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

Marc 是对的,您已经在其他实例变量中打开了一次文件,您无法再次打开。

于 2009-08-25T11:11:24.587 回答
0

我监督您使用文件名打开编写器。我以为你做了 TextWriter toText = new StreamWriter(toFile);

于 2009-08-25T11:22:58.853 回答