等于或小于不工作

时间:2015-09-10 20:26:59

标签: c#

在这一个小时里,我无法看到我做错了什么(笑)

        // ofDialog settings
        ofDialog.Filter = @"TXT Files|*.txt";
        ofDialog.Title = @"Select linkslist...";
        ofDialog.FileName = "linksList.txt";

        // is cancel pressed?
        if (ofDialog.ShowDialog() == DialogResult.Cancel)
            return;
        try
        {
            var objReader = new StreamReader(ofDialog.FileName);
            while (objReader.Peek() >= 0)
            {
                // count the forward slashes
                string haystack = objReader.ReadLine();
                string needle = "/";
                int count = new Regex(Regex.Escape(needle)).Matches(haystack).Count;

                //  3 forward slashes or less add
                if (count <= 3)
                {
                    //Helpers.returnMessage("count=" + count + "equal to=" + 3);
                    // add urls to the listview
                    ListViewItem lv = listViewMain.Items.Add(objReader.ReadLine());
                    lv.SubItems.Add(count.ToString());
                }

            }
            Helpers.returnMessage("Job done!");
            // update count

        }
        catch (Exception ex)
        {
            Helpers.returnMessage(ex.Message);
        }

我尝试计算"/"个字符,如果它的3个或更少字符添加到ListView,但即使我指定了它也会​​添加4个或更多个字符: if (count <= 3)

任何人都可以看到我的错误吗? :)

1 个答案:

答案 0 :(得分:7)

您拨打ReadLine()两次。因此,您添加到ListViewMain.Items的行与您检查的行不同。

更改

ListViewItem lv = listViewMain.Items.Add(objReader.ReadLine());

ListViewItem lv = listViewMain.Items.Add(haystack);

值得指出的是,您应该使用StreamReader的使用块。

using (var objReader = new StreamReader(ofDialog.FileName))
{
  while...
    //Rest of your code here.
}
Helpers.returnMessage("Job done!");

这样,流将在完成后进行处理。必须避免内存泄漏。