在这一个小时里,我无法看到我做错了什么(笑)
// 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)
任何人都可以看到我的错误吗? :)
答案 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!");
这样,流将在完成后进行处理。必须避免内存泄漏。