0

这是代码:

if (@"d:\Keywords.txt".Contains(line))
{
}
else
{
    w.WriteLine(line);
}

我在记事本中看到,在 Keywords.txt 中有一行:

丹尼尔

而线现在是丹尼尔但它仍然在做 w.WriteLine(line);

这是为什么 ?

4

7 回答 7

3

"d:\Keywords.txt"是一个字符串,因此您正在检查是否line包含在"d:\Keywords.txt"字符串中(不是,这就是它转到的原因else)。如果你想加载文件的内容,那么你可以使用(例如)File.ReadAllLines

var lines = File.ReadAllLines("d:\Keywords.txt"); 
if(lines.Contains(line))  
{
    // do something 
}

类方法的完整列表File可用@MSDN 文件类

于 2012-10-11T15:33:53.140 回答
1

因为字符串“d:\Keywords.txt”不包含丹尼尔行

于 2012-10-11T15:33:36.263 回答
1

因为您没有加载文件,所以您正在检查d:\Keywords.txt字符串Daniel

要加载文件并检查内容,请尝试

string fileContents = System.IO.File.ReadAllText(@"d:\Keywords.txt");
if(fileContents.Contains(line))
{
    //Desired code here
}
else
{
    w.WriteLine(line);
}
于 2012-10-11T15:33:36.510 回答
1
if (File.ReadAllLines(@"d:\Keywords.txt").Any(x => x.Contains(line));

将得到你想要的或完全匹配一个字符串

File.ReadAllLines(@"d:\Keywords.txt").Any(x => x.Equals(line));
于 2012-10-11T15:35:58.450 回答
0

您正在检查字符串是否d:\Keywords.txt包含 value Daniel。您没有打开文件并查看其内容。事实并非如此,因此您正在使用 else 语句。

查看 MSDN 关于如何从文件中读取文本的文档

于 2012-10-11T15:34:24.363 回答
0

此处的 Contains 调用是检查实际字符串 @"d:\Keywords.txt" 是否包含您的搜索字符串,而不是关键字.txt 的内容。

尝试类似:

        using (var sr = new StreamReader(@"d:\Keywords.txt"))
        {
            if (sr.ReadToEnd().ToString().Contains(line) == false)
            {
                w.WriteLine(line);
            }
        }
于 2012-10-11T15:35:11.700 回答
0

您应该首先从文件中读取行

    string[] lines = File.ReadAllLines(@"d:\Keywords.txt");

    foreach (string line in lines)
    {
               // check for your "line" here
    }
于 2012-10-11T15:36:00.523 回答