1

所以我使用此代码将我的列表视图项保存到文本文件中:

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);
        }

如您所见,我的列表视图项目数最多为 14738: 列表视图项目计数 但文本文件最多只能保存 14678(包括行号 0): 它停止的线

我没有收到任何错误或异常,我不认为我的代码有错,我已经多次使用它,结果总是完美的,我什至在超过 32000 个项目的列表视图中使用它。

4

2 回答 2

2

您是否尝试过将其包装StreamWriterusing 块中?我怀疑处理它会清除任何缓冲区,您将获得所有数据。

(编辑)或者您可以调用 FlushStreamWriter。由于 StreamWriter 是IDisposable (链接),您确实应该正确处理它的任何实例。

于 2013-12-30T01:31:49.600 回答
1

确保您的流写入器在缓冲区关闭之前实际上正在写入缓冲区中的所有内容。你可以这样做

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);
    }
}
于 2013-12-30T01:33:08.193 回答