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