记事本只能获取Streamwriter文本文件生成器上应该有1000个条目的768个条目

时间:2015-05-14 16:05:21

标签: c# streamwriter notepad

我正在创建一个简单的程序,该程序应该采用包含2列的1000个条目的数组并将其放入文本格式,然后将其输出到文件中。
出现了一些奇怪的事情。该文件只接收950或768个条目行,而不是1000个接收行。我的实际数组实际上是一个用于DrawLine类的点数组,但为了演示错误,我只使用一个直接计数数组。

我想知道问题出在哪里。是否因为添加到文件时存在最大缓冲区大小?是否仅仅是因为文本文件的最大大小?是因为实际文件是正确的,但记事本只让我看到文件的有限部分?我应该扔掉这台电脑并购买另一台吗?

任何帮助将不胜感激。为什么它停在768?这个数字似乎是武断的 如您所见,它是WindowsForm。

private void GcodeSave_Click(object sender, EventArgs e)
    {

        DialogResult result;  //Specifies identifiers to indicate the return value of a dialog box
        string fileName;

        using (SaveFileDialog fileChooser = new SaveFileDialog()) 
        {
            fileChooser.CheckFileExists = false;
            result = fileChooser.ShowDialog();
            fileName = fileChooser.FileName;
        }

        if(result==DialogResult.OK)
        {
            if (fileName == string.Empty)
                MessageBox.Show("Invalid File Name", "Error",
                    MessageBoxButtons.OK, MessageBoxIcon.Error);
            else
            {
                try
                {
                    FileStream output = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write);

                    fileWriter = new StreamWriter(output);
                    for (int t = 0; t <= 1000; t++)
                    {
                        fileWriter.WriteLine("{0}   {1}", t, t);

                    }

                    fileWriter.WriteLine("There were {0} elements in spiroArray", numberOfPoints);

                    //It only goes up to 950 in the text file.
                    //With word wrap off it goes to 764 and then it gets 1/3 way through 764 and writes 76
                }
                catch(IOException)
                {
                    MessageBox.Show("Error opening file", "Error",
                        MessageBoxButtons.OK, MessageBoxIcon.Error);
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:3)

FileStreamStreamWriter都在内部使用缓冲区。这些将在显式调用(通过Flush)或关闭/处置时刷新。

由于这些对象利用外部资源并实施IDisposable,因此它们都应该被处理掉。最常见的模式是使用using语句:

using (var stream = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write))
using (var writer = new StreamWriter(stream))
{
     //use writer here
}

一旦处理完毕,缓冲区中的数据将被写入文件,文件句柄将被释放。

答案 1 :(得分:1)

您需要关闭StreamWriter。