2011-08-30 120 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 
} 
相關問題