C#:将文本文件内容与字符串变量进行比较
我有一个将文本转储到文本文件的应用程序。我认为文本中可能存在不包含正确的回车符的问题,因此我正在编写一个测试,将此文件的内容与我在代码中声明的字符串变量进行比较 例: 1) 代码创建包含以下文本的文本文件: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行
这是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);