我正在创建一个简单的程序,该程序应该采用包含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);
}
}
}
}
答案 0 :(得分:3)
FileStream
和StreamWriter
都在内部使用缓冲区。这些将在显式调用(通过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。