所以即时使用此代码将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: 但文本文件最多只能保存到14678(包括行号0):
我没有错误或异常,我不认为我的代码是错误的,我已经使用了很多次,结果总是完美的,我甚至在超过32000项的列表视图中使用它。 / p>
答案 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);
}
}