您好,我可以知道为什么这段代码不起作用,它正在工作,但它也会删除非重复条目,对于某些列表,它会抛出一些错误
例如:
此列表有效,但也会删除http://test1.com
http://test.com
http://test.com
http://test1.com
http://1test.com
并且使用此列表将抛出此“System.ArgumentNullException未处理”错误
http://test.com
http://test.com
http://test1.com
http://1test.com
http://etest.com
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog buka = new OpenFileDialog();
buka.InitialDirectory = "";
buka.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
buka.FilterIndex = 2;
buka.RestoreDirectory = true;
buka.Title = "Cari";
buka.ShowDialog();
string bukafile = buka.FileName;
if (!String.IsNullOrEmpty(bukafile))
{
StreamReader isiFile = File.OpenText(bukafile);
while (isiFile.Peek() != -1)
{
if (!listBox1.Items.Contains(isiFile.ReadLine()))
{
listBox1.Items.Add(isiFile.ReadLine());
}
}
isiFile.Close();
}
}
答案 0 :(得分:3)
您应该缓存来自isiFile.ReadLine()
的行,以便比较您添加的同一行。
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog buka = new OpenFileDialog();
buka.InitialDirectory = "";
buka.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
buka.FilterIndex = 2;
buka.RestoreDirectory = true;
buka.Title = "Cari";
buka.ShowDialog();
string bukafile = buka.FileName;
if (!String.IsNullOrEmpty(bukafile))
{
StreamReader isiFile = File.OpenText(bukafile);
while (isiFile.Peek() != -1)
{
// use local variable here
string line = isiFile.ReadLine();
if (!listBox1.Items.Contains(line))
{
listBox1.Items.Add(line);
}
}
isiFile.Close();
}
}
答案 1 :(得分:3)
如果您没有非常大的文件,可以使用
替换大量代码var lines = File.ReadLines(bukafile).Distinct();
listBox1.DataSource = lines.ToList();
答案 2 :(得分:1)
您正在阅读两行,每个ReadLine()
来电一行。您使用第一行执行.Contains
检查,使用第二行添加到列表框。这两行在任何方面都没有相关性。
因此,对于第一个列表,首先要检查第一行中的http://test.com
是否在列表框中。它不是,所以你读下一行,巧合的是http://test.com
,并将其添加到列表框中。然后,检查列表框中是否http://test1.com
,发现它不是,然后继续将http://1test.com
添加到列表框中。
对于第二个列表,您有一个奇数个条目,因此对ReadLine
的最终调用将返回,我猜,null,您无法将其添加到列表框中。
修复
private void button1_Click(object sender, EventArgs e)
{
OpenFileDialog buka = new OpenFileDialog();
buka.InitialDirectory = "";
buka.Filter = "Text files(*.txt)|*.txt|All files (*.*)|*.*";
buka.FilterIndex = 2;
buka.RestoreDirectory = true;
buka.Title = "Cari";
buka.ShowDialog();
string bukafile = buka.FileName;
if (!String.IsNullOrEmpty(bukafile))
{
StreamReader isiFile = File.OpenText(bukafile);
while (isiFile.Peek() != -1)
{
string line = isiFile.ReadLine();
if (!listBox1.Items.Contains(line))
{
listBox1.Items.Add(line);
}
}
isiFile.Close();
}
}