Search code examples
c#while-loopstreamreader

While loop for StreamReader not working


the Form stops working inside while. Returns cursor to c=s.Substring... in while

StreamReader sr= new StreamReader("Unos.txt");
s = sr.ReadLine();
            c = s.Substring(s.IndexOf(',') + 2, (s.Length - s.IndexOf(',') + 2) - (s.Length - s.IndexOf('-') + 2));
            if ((String.Equals(cbRazred.SelectedItem.ToString(), c.Substring(0, (c.IndexOf('-')))) &&
                String.Equals(cbOdeljenje.SelectedItem.ToString(), odeljenje.ToString()))) lbSpisak.Items.Add(s.Substring(0, s.IndexOf(',')));
            while (s != null)
            {
                s = sr.ReadLine();
                c = s.Substring(s.IndexOf(',') + 2, (s.Length - s.IndexOf(',') + 2) - (s.Length - s.IndexOf('-') + 2));
                if ((String.Equals(cbRazred.SelectedItem.ToString(), c.Substring(0, (c.IndexOf('-')))) &&
                    String.Equals(cbOdeljenje.SelectedItem.ToString(), odeljenje.ToString()))) lbSpisak.Items.Add(s.Substring(0, s.IndexOf(',')));
            }
            sr.Close();

Solution

  • better use:

    while (!sr.EndOfStream)
    

    as a check for your while loop:

    using (StreamReader sr = new StreamReader("Unos.txt"))
    {
        while (!sr.EndOfStream)
        {
            s = sr.ReadLine();
    
            // make new checks on s because you're getting substrings and indexes that may not exist
            //e.g
            if (s.Length>=1)...
            //do you logic
        }
    }