【问题标题】:C# loading listView subItems from file using StreamReaderC# 使用 StreamReader 从文件中加载 listView 子项
【发布时间】:2016-03-16 20:31:03
【问题描述】:

我需要一些帮助来将文本文件加载到 listView 中。文本文件如下所示:

1,6 秒,5 秒,1 秒,17,
2,6 秒,4 秒,2 秒,33,
3,7 秒,5 秒,3 秒,44,

我必须将它加载到 listView 控件中,并且每个子项都应该用逗号(或任何其他字符)分隔。我尝试过这样的事情:

using (var sr = new StreamReader(file))
{
   string fileLine = sr.ReadLine();
   foreach (string piece in fileLine.Split(',')) 
   {     
      listView1.Items.Add(piece); 
   } 
   sr.Close(); 
}

除了仅将第一行加载到列表视图的第一列之外,它可以正常工作。我想不通。

感谢您的宝贵时间! 韩国!

【问题讨论】:

    标签: c# listview streamreader


    【解决方案1】:

    你必须前进到下一行,你可以使用while-loop:

    using (var sr = new StreamReader(file))
    {
        string fileLine;
        while ((fileLine = sr.ReadLine()) != null)
        {
            foreach (string piece in fileLine.Split(','))
            {
                listView1.Items.Add(piece);
            }
        }
    }
    

    请注意,您不需要手动关闭流,这是通过 using 语句完成的。

    另一种方法是使用File.ReadLinesFile.ReadAllLines,这有助于简化您的代码:

    var allPieces = File.ReadLines(file).SelectMany(line => line.Split(','));
    foreach(string piece in allPieces)
        listView1.Items.Add(piece);
    

    【讨论】:

    • 谢谢!这很有帮助,但是由于客户端系统的限制,我需要在.net 3.5 下编写。不幸的是,那里不支持 File.ReadLines。任何想法为什么 listView 在加载内容后会丢失格式?
    • @Luka: 那么你只需要改用File.ReadAllLines(或StreamReader)。唯一的区别是它将所有行读入内存。
    【解决方案2】:
    using (var sr = new StreamReader(file))
    {
         while(!sr.EndOfStream)
         {
              string fileLine = sr.ReadLine();
              foreach (string piece in fileLine.Split(',')) 
              {     
                  listView1.Items.Add(piece); 
              } 
              sr.Close(); 
         }
    }
    

    【讨论】:

      【解决方案3】:

      我猜你只需要添加:

      while (!sr.EndOfStream)
      {
                      string fileLine = sr.ReadLine();
                      foreach (string piece in fileLine.Split(',')) 
                      {     
                              listView1.Items.Add(piece); 
                      } 
      }
      

      sr.Close();// close 结束 while 作用域,因为你有一个多行文本,此代码无法读取第二行,并抛出异常此代码。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-03-14
        • 1970-01-01
        • 1970-01-01
        • 2017-12-11
        • 1970-01-01
        • 2010-10-18
        • 1970-01-01
        相关资源
        最近更新 更多