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

3
我是一名能翻译文本的助手。

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

例如:

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是否有类似的内置类)。谢谢。

6个回答

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

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


4

很抱歉,没有内置功能可以实现此功能。假设您的文件较小,最简单的方法是读取整个文件并进行比较:

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

如果文件比较长,您可能想逐行比较文件,因为早期发现差异可以减少IO。

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

1
实现读取文件中所有文本的更快方法是使用System.IO.File.ReadAllText(),但没有更短的字符串级别比较方法。

我不确定这是否真的更快-只是写起来更轻松(可能更重要的是)确保您不会泄漏句柄。 - Chris Shain
对不起,我指的是“更快地编写代码”。 - kmcc049

0

这应该可以工作:

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

我认为在C#中没有更快的方法了。


对于您没有使用的行为,我要向您发出三次鞭打和一次拳头摇晃的警告。 - Metro Smurf

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接