我剛剛接觸C#。 我需要打開一些目錄下的代碼文件,並獲得包含一些匹配字符串的特定行。 它是一個簡單的問題,我可以使用流讀取器逐個打開文件,然後逐行解析它們。 我想知道是否有更有效的方法來做同樣的事情。就像我的印象一樣,Stream閱讀器和逐行讀取操作會很繁瑣。C#讀取文件內容並查找字符串
1
A
回答
0
如果您需要檢查文件的全部內容,那麼您將需要閱讀每一行。 ReadLine()
是一種很好的方法。
,您可以一次讀取整個文件的內容,使用StreamReader.ReadToEnd()
1
File.ReadAllLines()會給你包含該文件中的每一行的數組。儘管如果你能夠在文件的中途停止閱讀,這可能會有更多的工作。如果沒有,它可能會節省你一些時間在IO(少個人IO調用,這只是一個猜測)。
如果你真的擔心,可以使用分析器或編寫一個基準。否則,使用最簡單的方法閱讀。
0
ReadToEnd()方法在LoC(代碼行)方面的確效率很高,但如果您關心性能,您可能需要小心,因爲它基本上會將整個文件內容加載到內存(串)。如果文件大小相當大,您肯定會對性能產生影響。
5
關於如何獲取文件的行,已經有一些好帖子,所以我想我會補充一點效率。有幾個人提到了File.ReadAllLines()方法。從效率的角度來看,這種方法存在問題,因爲它會一次將整個文件讀入內存。另外它使用一個數組作爲需要連續內存的存儲。如果文件足夠大,則會導致問題。
讀取文件的更有效方法是反覆使用StreamReader.ReadLine方法。它將一次返回一行,並且只需要保留內存中您關心的行。將它變成延遲評估迭代器也相對容易。
public static IEnumerable<string> ReadLinesEnumerable(string path) {
using (var reader = new StreamReader(path)) {
var line = reader.ReadLine();
while (line != null) {
yield return line;
line = reader.ReadLine();
}
}
}
就LINQ而言。您可以使用LINQ來同時匹配ReadAllLines和ReadLinesEnumerable方法,因爲它們都返回可枚舉的數據類型。例如
var query = from line in ReadLinesEnumerable(@"c:\some\path\file.txt")
where Regex.IsMatch(line, @"^(\d)+.*$")
select line;
相關問題
- 1. 如何讀取所有文件內容並使用C#在文件內容中查找字符串?
- 2. Python讀取文件,查找字符串並刪除字符
- 3. 查找並替換字符串內的內容(C#)
- 4. 讀取C文件,並找到子串
- 5. php讀取文件尋找字符串
- 6. Java:上傳文件並取回文件的字符串(內容)
- 7. 如何在字符串中讀取文本文件內容php
- 8. 讀取UTF8文件並與字符串
- 9. 閱讀文本文件以查找特定字符串並讀取與其相關的另一個字符串
- 10. 從文本文件中讀取ActionScript 3.0並將內容分配給字符串
- 11. C++讀取文件並提取字符串
- 12. 從字符串流中讀取內容
- 13. 如何在C++中將文件的內容讀入字符串
- 14. 如何將二進制文件內容讀取爲字符串?
- 15. 作爲java字符串讀取外部javascript文件的內容
- 16. 查找文件中的字符串C++
- 17. 讀取文件名,並找到特定的字符串
- 18. Linux命令:在文件中的內容查找的字符串
- 19. 在xml中保存字符串的內容並再次讀取xml文件
- 20. PHP讀取並執行一個文件的內容爲一個字符串
- 21. C - 讀取文件並將內容寫入數組一個字符一次char
- 22. Python:讀取文本文件的內容並查找匹配/條件
- 23. 按字符串內容查找一些文件並上傳到FTP
- 24. 在C中讀取文件並拆分字符串
- 25. 從文件中讀取一行並搜索字符串(C++)
- 26. 從c文件讀取行並將字符串放入數組
- 27. 檢查字符串C++的內容
- 28. Python:讀取文件並檢查重複字符串
- 29. 讀取字符串並將內容寫入結構體
- 30. 讀取字符串,檢查字符串並輸出數字
這是一個很好的做法。 – 2009-04-27 05:41:34