streamwriter不会将所有listview项目保存到文本文件中

时间:2013-12-30 01:27:43

标签: c# winforms listview streamwriter.write

所以即时使用此代码将listview项目保存到文本文件中:

SaveFileDialog sfd = new SaveFileDialog();
        sfd.InitialDirectory = Application.ExecutablePath;
        sfd.Filter = "Text Files (*.txt)|*.txt";
        sfd.Title = "Save Text file";
        sfd.FileName = "log";
        DialogResult result = sfd.ShowDialog();
        if (result == DialogResult.Cancel)
            return;
        StreamWriter wwrite = new StreamWriter(sfd.FileName, false, Encoding.GetEncoding("SHIFT-JIS"));
        for (int i = 0; i < 14738; ++i)
        {
            wwrite.WriteLine(i.ToString() + "|" + listView1.Items[i].SubItems[1].Text + "|" + listView1.Items[i].SubItems[2].Text + "|" + listView1.Items[i].SubItems[3].Text);
        }

您可以看到我的listview项目计数最多为14738: listview item count 但文本文件最多只能保存到14678(包括行号0): line where it stops

我没有错误或异常,我不认为我的代码是错误的,我已经使用了很多次,结果总是完美的,我甚至在超过32000项的列表视图中使用它。 / p>

2 个答案:

答案 0 :(得分:2)

您是否尝试将StreamWriter包裹在using block中?我怀疑处理它会清除任何缓冲区,你将获得所有数据。

(编辑)或您可以在StreamWriter上call Flush。由于StreamWriter是IDisposable (link),你真的应该妥善处理它的任何实例。

答案 1 :(得分:1)

确保您的streamwriter在关闭之前实际上在缓冲区中写入所有内容。您可以使用

执行此操作
wwrite.Flush()

或将您的streamwriter包装在using块中。处理Streamwriter会自动刷新其缓冲区。将您的代码更改为

using (StreamWriter wwrite = new StreamWriter(sfd.FileName, false, Encoding.GetEncoding("SHIFT-JIS")))
{
    for (int i = 0; i < 14738; ++i)
    {
        wwrite.WriteLine(i.ToString() + "|" + listView1.Items[i].SubItems[1].Text + "|" + listView1.Items[i].SubItems[2].Text + "|" + listView1.Items[i].SubItems[3].Text);
    }
}