【问题标题】:streamwriter doesn't save all the listview items to text filestreamwriter 不会将所有列表视图项保存到文本文件
【发布时间】:2013-12-30 01:27:42
【问题描述】:

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

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 个项目的列表视图中使用它。

【问题讨论】:

    标签: c# winforms listview streamwriter.write


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      wwrite.Flush()
      

      或通过将您的流写入器包装在 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);
          }
      }
      

      【讨论】:

      • 谢谢,这就是答案,我用 using 块包裹它,让它保存得更快。
      • @Omarrrio using 块对于像这样的实例非常有用,在这种情况下,您将流写入器用于单个简单的事情。如果您曾经将流写入器用于多个操作,那么刷新可能是更好的选择。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-18
      • 2014-01-02
      • 2015-01-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多