我有一个将文本转储到文本文件的应用程序。我认为文本可能存在不包含正确回车的问题,因此我正在编写一个测试,将该文件的内容与我在代码中声明的字符串变量进行比较。
例如:
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有一个类似于此的内置类)。提前谢谢。
答案 0 :(得分:5)
您可以使用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);
这很简单,它打开一个文件,读取所有行并处理关闭。
答案 1 :(得分:4)
不,没有内置任何东西。假设您的文件很小,最简单的方法就是阅读整个内容并进行比较:
var fileContents = File.ReadAllText(fileName);
return testString == filecontents;
如果文件相当长,您可能希望逐行比较文件,因为尽早找到差异可以减少IO。
答案 2 :(得分:1)
实现读取文件中所有文本的更快方法是
System.IO.File.ReadAllText()
但是没有办法比较短的字符串级别
答案 3 :(得分:1)
if(System.IO.File.ReadAllText(filename) == "This is line 1\nThis is line 2\nThis is line3") {
// it matches
}
答案 4 :(得分:0)
这应该有效:
StreamReader streamReader = new StreamReader(filePath);
string originalString = streamReader.ReadToEnd();
streamReader.Close();
我不认为在C#中有更快的方法。
答案 5 :(得分:0)
您可以通过以下方式将整个文件读入字符串变量:
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))