Использование StreamReader для проверки наличия в файле строки - PullRequest
17 голосов
/ 31 мая 2011

У меня есть строка 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, чтобы записать в файл строку 1 или 0.Как мне это сделать?

Ответы [ 3 ]

31 голосов
/ 31 мая 2011

Ожидаете ли вы, что файл будет особенно большим? Если нет, то самым простым способом было бы просто прочитать все это:

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 доступен только из .NET 4, но вместо этого вы могли бы достаточно просто вызвать TextReader.ReadLine в цикле.

3 голосов
/ 31 мая 2011
  1. Вы не должны добавлять ';'в конце оператора использования.
  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");
            }
    }   
    
0 голосов
/ 31 мая 2011
if ( System.IO.File.ReadAllText("C:\\Work\\list.txt").Contains( args[0] ) )
{
...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...