为什么我要检查文本文件中是否存在一行,当该行存在时它不起作用?

时间:2012-10-11 15:31:36

标签: c#

这是代码:

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

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

  

丹尼尔

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

为什么?

7 个答案:

答案 0 :(得分: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 File Class

答案 1 :(得分:1)

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

答案 2 :(得分: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);
}

答案 3 :(得分:1)

if (File.ReadAllLines(@"d:\Keywords.txt").Any(x => x.Contains(line));

将获得您想要的内容或完全匹配字符串

File.ReadAllLines(@"d:\Keywords.txt").Any(x => x.Equals(line));

答案 4 :(得分:0)

您正在检查字符串d:\Keywords.txt是否包含值Daniel。您打开文件并查看其内容。它不会让你得到else语句。

查看MSDN关于如何Read Text from a File

的文档

答案 5 :(得分:0)

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

尝试类似:

        using (var sr = new StreamReader(@"d:\Keywords.txt"))
        {
            if (sr.ReadToEnd().ToString().Contains(line) == false)
            {
                w.WriteLine(line);
            }
        }

答案 6 :(得分:0)

你应该首先阅读文件中的行

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

    foreach (string line in lines)
    {
               // check for your "line" here
    }