2011-08-30 58 views
3

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

例:

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有一个类似于此类的内置类)。提前致谢。

回答

5

您可以使用的StreamReader的ReadToEnd的()方法在一个字符串像

using System.IO; 

    using(StreamReader streamReader = new StreamReader(filePath)) 
    { 
     string text = streamReader.ReadToEnd(); 
    } 
阅读内容

注意:您必须确保释放资源(上面的代码使用“使用”来做到这一点),并且ReadToEnd()方法假定流知道它何时到达结束位置。对于服务器只在需要时才发送数据并且不关闭连接的交互式协议,ReadToEnd可能会无限期地阻塞,因为它没有达到目的,应该避免,并且还应该注意字符串中的当前位置应该在一开始。

您还可以使用ReadAllText像

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

这是简单,它会打开一个文件,读取所有线路,并采取关闭,以及照顾。

0

这应该工作:

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

我不认为这是在C#中做的更快捷的方法。

+0

由于缺乏使用,3次睫毛和一个拳头震动你。 –

1

实现阅读完所有的文本文件中的一个更快的方式是 System.IO.File.ReadAllText()

,但世界上没有办法做内置该串级比较短

+0

我不确定这实际上是否执行得更快 - 只需花费较少的精力(可能更重要的是)确保您不泄漏句柄。 –

+0

对不起,我不是很清楚我的意思是'更快为您编写代码' – kmcc049

4

没有,没有什么。最简单的方法,假设你的文件很小,是刚刚读了整个事情并加以比较:

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

如果该文件是相当长的,你可能需要比较一行文件中的行,因为找到一个早期的差异会让你减少IO。

+0

好的建议阅读行以节省IO。 – adamjmarkham

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)) 
1
if(System.IO.File.ReadAllText(filename) == "This is line 1\nThis is line 2\nThis is line3") { 
    // it matches 
} 
相关问题