C #: сравнение содержимого текстового файла со строковой переменной - PullRequest
3 голосов
/ 31 августа 2011

У меня есть приложение, которое выводит текст в текстовый файл. Я думаю, что может быть проблема с текстом, не содержащим правильных возвратов каретки, поэтому я нахожусь в процессе написания теста, который будет сравнивать содержимое этого файла со строковой переменной, которую я объявляю в коде.

Ex:

1) Код создает текстовый файл, содержащий текст:

This is line 1
This is line 2
This is line 3

2) У меня есть следующая строка, с которой я хочу сравнить ее:

string testString = "This is line 1\nThis is line 2\nThis is line3"

Я понимаю, что могу открыть средство чтения потокового файла и построчно прочитать текстовый файл и сохранить его в изменяемой строковой переменной, добавляя "\ n" после каждой строки, но при этом задаюсь вопросом, не изобретает ли это колесо заново ( Другими словами, .NET имеет встроенный класс для чего-то вроде этого). Заранее спасибо.

Ответы [ 6 ]

5 голосов
/ 31 августа 2011

вы можете либо использовать метод ReadToEnd () StreamReader для чтения содержимого в одну строку, например

    using System.IO;

    using(StreamReader streamReader = new StreamReader(filePath))
    {
       string text = streamReader.ReadToEnd();
    }

Примечание: вы должны убедиться, что вы освободили ресурсы (код выше использует "using" для выполненияthat) и метод ReadToEnd () предполагают, что поток знает, когда он достиг конца.Для интерактивных протоколов, в которых сервер отправляет данные только тогда, когда вы запрашиваете их и не закрывает соединение, ReadToEnd может блокироваться на неопределенный срок, потому что он не достигает конца, и его следует избегать, а также вам следует позаботиться о текущей позиции в строкедолжно быть в начале.

Вы также можете использовать ReadAllText, например

    // Open the file to read from.
    string readText = File.ReadAllText(path);

, который прост, он открывает файл, читает все строки и также заботится о закрытии.

4 голосов
/ 31 августа 2011

Нет, для этого ничего не встроено. Самый простой способ, предполагая, что ваш файл небольшой, - это просто прочитать все и сравнить их:

var fileContents = File.ReadAllText(fileName);
return testString == filecontents;

Если файл довольно длинный, вы можете сравнить файл построчно, так как раннее обнаружение разницы позволит вам уменьшить количество операций ввода-вывода.

1 голос
/ 31 августа 2011
if(System.IO.File.ReadAllText(filename) == "This is line 1\nThis is line 2\nThis is line3") {
   // it matches
}
1 голос
/ 31 августа 2011

Более быстрый способ реализовать чтение всего текста в файле System.IO.File.ReadAllText()

но нет способа сделать сравнение уровня строки короче

0 голосов
/ 31 августа 2011

Вы можете прочитать весь файл в строковую переменную следующим образом:

        FileStream stream;
        StreamReader reader;
        stream = new FileStream(yourFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
        reader = new StreamReader(stream);
        string stringContainingFilesContent = reader.ReadToEnd();
        // and check for your condition
        if (testString.Equals(stringContainingFilesContent, StringComparison.OrdinalIgnoreCase))
0 голосов
/ 31 августа 2011

Это должно работать:

StreamReader streamReader = new StreamReader(filePath);
string originalString = streamReader.ReadToEnd();
streamReader.Close();

Я не думаю, что есть более быстрый способ сделать это в C #.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...