使用StreamReader检查文件是否包含字符串

本文关键字:包含 字符串 是否 文件 StreamReader 检查 使用 | 更新日期: 2023-09-27 17:57:57

我有一个字符串是args[0]

这是我到目前为止的代码:

static void Main(string[] args)
{
    string latestversion = args[0];
    // create reader & open file
    using (StreamReader sr = new StreamReader("C:''Work''list.txt"))
    {
        while (sr.Peek() >= 0)
        {
            // code here
        }
   }
}

我想检查我的list.txt文件是否包含args[0]。如果是,那么我将创建另一个进程StreamWriter,将字符串10写入文件中。我该怎么做?

使用StreamReader检查文件是否包含字符串

您希望文件特别大吗?如果没有,最简单的方法就是阅读整个内容:

using (StreamReader sr = new StreamReader("C:''Work''list.txt"))
{
    string contents = sr.ReadToEnd();
    if (contents.Contains(args[0]))
    {
        // ...
    }
}

或者:

string contents = File.ReadAllText("C:''Work''list.txt");
if (contents.Contains(args[0]))
{
    // ...
}

或者,你可以逐行阅读:

foreach (string line in File.ReadLines("C:''Work''list.txt"))
{
    if (line.Contains(args[0]))
    {
        // ...
        // Break if you don't need to do anything else
    }
}

或者更像LINQ:

if (File.ReadLines("C:''Work''list.txt").Any(line => line.Contains(args[0])))
{
    ... 
}

请注意,ReadLines只能从.NET4中获得,但您可以很容易地在循环中调用TextReader.ReadLine

  1. 不应添加";"在using语句的末尾
  2. 工作代码:

    string latestversion = args[0];
    using (StreamReader sr = new StreamReader("C:''Work''list.txt"))
    using (StreamWriter sw = new StreamWriter("C:''Work''otherFile.txt"))
    {
            // loop by lines - for big files
            string line = sr.ReadLine();
            bool flag = false;
            while (line != null)
            {
                if (line.IndexOf(latestversion) > -1)
                {
                    flag = true;
                    break;
                }
                line = sr.ReadLine();
            }
            if (flag)
                sw.Write("1");
            else
                sw.Write("0");
            // other solution - for small files
            var fileContents = sr.ReadToEnd();
            {
                if (fileContents.IndexOf(latestversion) > -1)
                    sw.Write("1");
                else
                    sw.Write("0");
            }
    }   
    
if ( System.IO.File.ReadAllText("C:''Work''list.txt").Contains( args[0] ) )
{
...
}

接受的答案读取内存中可能消耗的所有文件。

这是一个受VMAtm答案启发的替代方案

using (var sr = new StreamReader("c:''path''to''file", true))
    for (string line; (line = sr.ReadLine()) != null;) //read line by line
        if (line.Contains("mystring"))
            return true;