代码之家  ›  专栏  ›  技术社区  ›  Sneh

使用streamreader读取文本文件并在列表框中显示结果

  •  0
  • Sneh  · 技术社区  · 6 年前

    我在一个文本文件中有一些信息,我想在WPF的列表框中读取和显示这些信息。这是我在文本文件中的内容:

    First Name: ABC
    Last Name: def
    Mobile: 5453553535
    email: abc@gmail.com
    

    这就是代码:

    private void listView1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string text;
        FileStream aFile = new FileStream("D:\\PhoneBook.txt", FileMode.Open);
        StreamReader sr = new StreamReader(aFile);
        text = sr.ReadLine();
        // Read data in line by line.
        while (text != null)
        {
            foreach (string info in text.Split(',')) 
            {
                listView1.Items.Add(info);
            }       
        }
        sr.Close();
    }
    

    每次运行程序时,列表框都是空的,并且会冻结。任何帮助都将不胜感激。谢谢

    2 回复  |  直到 6 年前
        1
  •  0
  •   roozbeh S    6 年前

    您需要在循环中添加一个readline:

    private void listView1_SelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        string text;
        FileStream aFile = new FileStream("D:\\PhoneBook.txt", FileMode.Open);
        StreamReader sr = new StreamReader(aFile);
        text = sr.ReadLine();
        // Read data in line by line.
        while (text != null)
        {
            foreach (string info in text.Split(',')) 
            {
                listView1.Items.Add(info);
            }        
            // read the next line here
            text = sr.ReadLine();      
        }
    
        sr.Close();
    }
    

    但更好的方法是:

    while(!sr.EndOfStream)
    {
        text = sr.ReadLine();
        // now write ...
    }
    
        2
  •  0
  •   Sam    6 年前

    您不需要在循环中更新“文本”—只需要在循环中添加text=sr.readline();这样可以避免while循环永远持续下去!

    也就是说,您可以只使用file.readalllines()。- https://docs.microsoft.com/en-us/dotnet/api/system.io.file.readalllines?view=netframework-4.7.2