在C#中讀取文件的六種主流方法詳解
更新時間:2025年11月23日 14:00:10 作者:降薪碼農(nóng)
在 C# 中讀取文件有多種方法,不同方式適用于不同場景(小型文件、大型文件、文本文件或二進制文件),本文給大家介紹了 6 種主流方法以及其適用場景,需要的朋友可以參考下
在 C# 中讀取文件有多種方法,不同方式適用于不同場景(小型文件、大型文件、文本文件或二進制文件)。以下是 6 種主流方法及其適用場景:
方法1:File.ReadAllText(讀取整個文本文件)
string path = @"C:\Example\test.txt";
try
{
string content = File.ReadAllText(path);
Console.WriteLine(content);
}
catch (IOException ex)
{
Console.WriteLine($"讀取失敗: {ex.Message}");
}
特點:
- 超簡單,單行代碼讀取全部
- 僅適合小型文件(全部加載到內(nèi)存)
- 適用于配置文件、JSON等小文件
方法2:File.ReadAllLines(按行讀取為數(shù)組)
string[] lines = File.ReadAllLines(path);
foreach (string line in lines)
{
Console.WriteLine(line);
}
特點:
- 分行處理,適合日志文件
- 同樣全量加載,內(nèi)存壓力大
方法3:StreamReader(逐行讀取,內(nèi)存友好)
using (StreamReader reader = new StreamReader(path))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line); // 逐行處理
}
}
特點:
- 內(nèi)存效率高,適合大文件
- 推薦用于日志文件、大型CSV
方法4:FileStream(二進制/字節(jié)讀取)
byte[] buffer = new byte[1024];
using (FileStream fs = new FileStream(path, FileMode.Open))
{
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
string chunk = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.Write(chunk);
}
}
特點:
- 適合二進制文件(如圖片、視頻)
- 可控緩沖區(qū)大小
方法5:async/await(異步讀取,避免UI卡頓)
async Task ReadFileAsync(string path)
{
using (StreamReader reader = new StreamReader(path))
{
string content = await reader.ReadToEndAsync();
Console.WriteLine(content);
}
}
// 調(diào)用
await ReadFileAsync(@"C:\largefile.txt");
特點:
- 不阻塞UI線程,WinForms/WPF必備
- 適合網(wǎng)絡(luò)磁盤文件
方法6:MemoryMappedFile(超大型文件,內(nèi)存映射)
using (var mmf = MemoryMappedFile.CreateFromFile(path))
{
using (var stream = mmf.CreateViewStream())
{
byte[] buffer = new byte[1024];
stream.Read(buffer, 0, buffer.Length);
string text = Encoding.UTF8.GetString(buffer);
Console.WriteLine(text);
}
}
特點:
- 處理GB級文件(如數(shù)據(jù)庫文件)
- 高級場景使用
方法對比表
| 方法 | 適用文件大小 | 內(nèi)存占用 | 速度 | 適用場景 |
|---|---|---|---|---|
ReadAllText | <10MB | 高 | 快 | 配置文件 |
ReadAllLines | <10MB | 高 | 快 | 日志分析 |
StreamReader | 任意 | 低 | 中 | 大型文本 |
FileStream | 任意 | 可控 | 中 | 二進制文件 |
async/await | 任意 | 依實現(xiàn) | 中 | UI程序 |
MemoryMapped | GB+ | 極低 | 慢 | 超大文件 |
注意事項
- 異常處理:始終用
try-catch捕獲FileNotFoundException或IOException - 路徑安全:
string safePath = Path.Combine("C:", "Folder", "file.txt"); // 避免手寫路徑
- 編碼問題:指定正確的編碼(如中文用
Encoding.UTF8)
File.ReadAllText(path, Encoding.GetEncoding("GB2312"));
- 資源釋放:必須用
using或手動釋放FileStream/StreamReader
最佳實踐
- 小型文本 →
File.ReadAllText - 大型文本 →
StreamReader+while - 二進制數(shù)據(jù) →
FileStream - UI程序 → async/await +
ReadToEndAsync - GB級文件 →
MemoryMappedFile
以上就是在C#中讀取文件的六種主流方法詳解的詳細內(nèi)容,更多關(guān)于C#讀取文件的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C#結(jié)合SQLite數(shù)據(jù)庫使用方法及應(yīng)用場景
本文介紹SQLite的輕量、零配置、跨平臺特性及其在C#中的應(yīng)用,涵蓋數(shù)據(jù)庫創(chuàng)建、增刪改查操作及SQL語法,通過NuGet安裝組件實現(xiàn)數(shù)據(jù)管理,并使用DataTable處理查詢結(jié)果,感興趣的朋友一起看看吧2025-07-07
解析Silverlight調(diào)用WCF/Rest異常的解決方法
本篇文章對Silverlight調(diào)用WCF/Rest異常的解決方法進行了詳細的分析介紹,需要的朋友參考下2013-05-05
C#?WinForm?RichTextBox文本動態(tài)滾動顯示文本方式
這篇文章主要介紹了C#?WinForm?RichTextBox文本動態(tài)滾動顯示文本方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-03-03
使用aspose.word 第三方的插件實現(xiàn)導(dǎo)出word
本文給大家分享的是一個使用使用aspose.word 第三方的插件實現(xiàn)導(dǎo)出word的實例,十分的實用,有需要的小伙伴可以參考下。2015-06-06
在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理的方法
在國際化環(huán)境下,越來越多的程序需要做多語言版本,這篇文章主要介紹了在WinForm應(yīng)用程序中快速實現(xiàn)多語言的處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2018-07-07

