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

C#:将文本文件内容与字符串变量进行比较,c#,.net,string,file-io,compare,C#,.net,String,File Io,Compare,我有一个将文本转储到文本文件的应用程序。我认为文本中可能存在不包含正确的回车符的问题,因此我正在编写一个测试,将此文件的内容与我在代码中声明的字符串变量进行比较 例: 1) 代码创建包含以下文本的文本文件: 这是第1行 这是2号线 这是3号线 2) 我要将其与以下字符串进行比较: string testString = "This is line 1\nThis is line 2\nThis is line3" 我知道我可以打开一个文件流读取器,逐行读取文本文件,并将其存储在可变字符串变量

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

例:

1) 代码创建包含以下文本的文本文件:

这是第1行
这是2号线
这是3号线
2) 我要将其与以下字符串进行比较:

string testString = "This is line 1\nThis is line 2\nThis is line3"
我知道我可以打开一个文件流读取器,逐行读取文本文件,并将其存储在可变字符串变量中,同时在每行后面添加“\n”,但我想知道这是否是在重新发明轮子(换句话说,.NET有一个类似于此的内置类)。提前感谢。

这应该可以:

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

我认为在C#中没有更快的方法来实现这一点。

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


但是没有办法在更短的时间内进行字符串级别的比较不,没有内置的功能。假设您的文件很小,最简单的方法就是读取整个文件并进行比较:

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

如果文件相当长,您可能希望逐行比较文件,因为尽早发现差异可以减少IO

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

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

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

    using System.IO;

    using(StreamReader streamReader = new StreamReader(filePath))
    {
       string text = streamReader.ReadToEnd();
    }
注意:您必须确保释放资源(上面的代码使用“using”来完成),ReadToEnd()方法假设流知道它何时到达终点。对于交互式协议,在这种协议中,服务器仅在您请求数据且未关闭连接时才发送数据,ReadToEnd可能会无限期阻塞,因为它没有到达终点,因此应避免使用ReadToEnd,并且您还应注意字符串中的当前位置应位于起点

您还可以使用ReadAllText,如

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

这很简单,它打开一个文件,读取所有行,并负责关闭

我不确定这是否真的执行得更快——只需要更少的努力来编写(可能更重要的是)以确保您不会泄漏句柄。对不起,我不清楚我的意思是“更快地为您编写代码”,因为缺少使用,我对您进行了3次鞭打和一次拳头摇晃。
    // Open the file to read from.
    string readText = File.ReadAllText(path);