C#程式:逐行讀取檔案內容
介紹
在這裡,我們將學習編寫一個C#程式來逐行讀取檔案內容。有多種方法可以做到這一點,我們將逐一討論它們。
C#中進行檔案處理。在大多數情況下,檔案用於儲存資料。通俗地說,檔案處理或檔案管理就是各種過程,例如建立檔案、從中讀取、向其中寫入、追加等等。檔案的讀取和寫入是檔案處理中最常見的兩個操作。
1. 使用File.ReadLines()方法
逐行讀取檔案內容的第一種方法是使用File.ReadLines()方法。此方法接受字元編碼作為可選引數。
嗯,此過程可能會引發一些異常,例如IO異常。如果發生I/O錯誤,則會引發此異常;如果嘗試開啟的檔案未找到,則會引發另一個錯誤FileNotFoundException。
此過程還有一個缺點:當處理大型檔案時,此技術效率非常低。它返回Enumerable,我們可以先開始列舉,然後才返回整個集合。
演算法
下面的演算法將逐步說明如何使用File.ReadLines()方法逐行讀取檔案內容。
下面討論的演算法將引導我們建立程式。
步驟1 − 建立一個字串,用於儲存檔案路徑的名稱,記住這是一個絕對路徑。
步驟2 − 使用IEumerable獲取最終結果,因為檔案是逐行讀取的。
步驟3 − 使用Environment.Newline獲取為環境定義的新行字串。然後程式結束。
示例
以下是此過程的程式碼:
using System; using System.Collections.Generic; using System.IO; public class Example { public static void Main() { string fileloc = @"D:\ttpt\loc
ew.txt"; IEnumerable<string> lines = File.ReadLines(fileloc); Console.WriteLine(String.Join(Environment.NewLine, lines)); } }
輸出
This is a file. Hello from tutorials point.
首先需要建立一個字串型別的變數,其中包含檔案位置的地址。然後程式逐行讀取檔案。
2. 使用File.ReadAllLines()方法
逐行讀取檔案內容的另一種方法是使用File.ReadAllLines()方法。對於大型資料檔案,我們不應使用ReadAllLines,因為與返回Enumerable的ReadLines不同,ReadAllLines返回包含檔案所有行的字串陣列,並且我們必須等待返回整個字串陣列後才能訪問該陣列。
此方法接受字元編碼作為可選引數,類似於ReadLines。嗯,此過程可能會引發一些異常,例如IO異常。如果發生I/O錯誤,則會引發此異常;如果嘗試開啟的檔案未找到,則會引發另一個錯誤FileNotFoundException。
演算法
下面的演算法將逐步說明如何使用File.ReadAllLines()方法逐行讀取檔案內容。
下面討論的演算法將引導我們建立程式。
步驟1 − 建立一個字串,用於儲存檔案路徑的名稱,記住這是一個絕對路徑。
步驟2 − 接下來,使用ReadAllLines,程式開啟文字檔案,讀取其所有行,然後結束。
步驟3 − 使用Environment.Newline獲取為環境定義的新行字串。然後程式結束。
示例
以下是此過程的程式碼:
using System; using System.IO; public class Example { public static void Main() { string fileloc = @"D:\ttpt\loc
ew.txt"; string[] lines = File.ReadAllLines(fileloc); Console.WriteLine(String.Join(Environment.NewLine, lines)); } }
輸出
This is a file. Hello from tutorials point.
首先需要建立一個字串型別的變數,其中包含檔案位置的地址。然後,程式逐行讀取檔案。這裡的區別在於,行是在字串中讀取的。當程式中使用string.join時,它們都會被連線起來。
3. 使用StreamReader.ReadLine()方法
還有一種方法可以使用StreamReader類逐行讀取檔案。該方法是StreamReader.ReadLine()。這執行到檔案的末尾。
它的工作原理是從當前流中讀取一行文字並將其作為字串返回。這將返回輸入流中的下一行,如果輸入流已達到其結尾,則返回null。這樣它就到達了檔案的末尾。
如果發生任何I/O錯誤,這裡也有I/O異常。另一個異常是OutOfMemoryException,當沒有足夠的記憶體來為返回的字串建立緩衝區時發生。
演算法
下面的演算法將逐步說明如何使用StreamReader.ReadLine()方法逐行讀取檔案內容。
下面討論的演算法將引導我們建立程式。
步驟1 − 建立一個字串,用於儲存檔案路徑的名稱,記住這是一個絕對路徑。
步驟2 − 建立一個新的讀取器來讀取檔案內容。
步驟3 − while迴圈執行到檔案的末尾。當它到達null時,確定結束。
步驟4 − 最後,在讀取檔案內容後,程式碼退出。
示例
以下是此過程的程式碼:
using System; using System.IO; public class Example { public static void Main() { string fileloc = @"D:\ttpt\loc
ew.txt"; using (StreamReader read = new StreamReader(fileloc)) { string line; while ((line = read.ReadLine()) != null) { Console.WriteLine(line); } } } }
輸出
This is a file. Hello from tutorials point.
在此方法中,也首先建立一個包含檔案地址的字串。然後建立一個讀取例項。它透過逐行讀取內容到達null,即檔案的末尾。
時間複雜度
由於我們在這裡逐行讀取檔案,但一次讀取所有內容。無論使用什麼方法,即File.ReadLines()、Files.ReadAllLines()和StreamReader.ReadLine()。所有這些都一次性讀取檔案。因此,這裡每種方法的時間複雜度都是O(1)。
結論
在本文中,我們廣泛討論了C#程式逐行讀取檔案內容的方法。我們學習瞭如何透過三種不同的方式實現:兩種來自File類,分別是ReadLines()和ReadAllLines();第三種來自StreamReader類。然後我們討論了這三種技術的程式碼和演算法。我們希望本文能幫助您增強對C#的瞭解。