c#:将文本文件内容与字符串变量进行比较

本文关键字:变量 字符串 比较 文本 文件 | 更新日期: 2023-09-27 18:07:17

我有一个将文本转储到文本文件的应用程序。我认为可能存在文本不包含适当的回车的问题,所以我正在编写一个测试,将这个文件的内容与我在代码中声明的字符串变量进行比较。

,

1) Code创建了一个包含以下文本的文本文件:

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有一个内置的类来处理这样的事情)。

c#:将文本文件内容与字符串变量进行比较

您可以使用StreamReader的ReadToEnd()方法读取单个字符串中的内容,例如

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

注意:你必须确保你释放了资源(上面的代码使用"using"来做这件事),ReadToEnd()方法假设流知道它什么时候到达了结束。对于交互协议中,服务器只在你请求时才发送数据,并且不关闭连接,ReadToEnd可能会无限期地阻塞,因为它没有到达结束,应该避免,并且你应该注意字符串中的当前位置应该在开始。

你也可以像

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

很简单它打开一个文件,读取所有行,并处理关闭。

不,没有什么内置的。假设您的文件很小,最简单的方法是读取整个文件并比较它们:

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

如果文件相当长,您可能希望逐行比较文件,因为及早发现差异将允许您减少IO。

实现读取文件中所有文本的更快方法是System.IO.File.ReadAllText()

但是没有办法进行字符串级别的比较

if(System.IO.File.ReadAllText(filename) == "This is line 1'nThis is line 2'nThis is line3") {
   // it matches
}

应该可以:

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

您可以通过以下方式将整个文件读入字符串变量:

        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))