最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于C#實現文本讀取的常用方式詳解

 更新時間:2026年04月30日 09:02:52   作者:廈門德仔  
本文詳細介紹了在C#開發(fā)中使用七種不同的方式來讀取文件,包括FileStream配合Read方法,逐字節(jié)讀取,File類的ReadAllText,StreamReader逐行讀取和一次性讀取等,感興趣的小伙伴可以跟隨小編一起學習一下

前言

文本讀取在上位機開發(fā)中經常會使用到,實現的方式也有很多種,今天跟大家分享一下C#實現讀取文本的7種方式。

這里我們先寫好了一個測試界面,提供一個文件路徑選擇的入口,具體如下所示:

方式一

基于FileStream,并結合它的Read方法讀取指定的字節(jié)數組,最后轉換成字符串進行顯示。

 this.rtb_Content.Clear();
            FileStream fs = new FileStream(this.txt_FilePath.Text, FileMode.Open, FileAccess.Read);
            int n = (int)fs.Length;
            byte[] b = new byte[n];
            int r = fs.Read(b, 0, n);
            fs.Close();
            this.rtb_Content.Text = Encoding.UTF8.GetString(b, 0, n);

方式二

            this.rtb_Content.Clear();
            FileStream fs = new FileStream(this.txt_FilePath.Text, FileMode.Open, FileAccess.Read);
            long n = fs.Length;
            byte[] b = new byte[n];
            int data, index;
            index = 0;
            data = fs.ReadByte();
            while (data != -1)
            {
                b[index++] = Convert.ToByte(data);
                data = fs.ReadByte();
            }
            fs.Close();
            this.rtb_Content.Text = Encoding.UTF8.GetString(b);

方式三

基于File類,直接全部讀取出來并顯示。

  this.rtb_Content.Clear();
            this.rtb_Content.Text = File.ReadAllText(this.txt_FilePath.Text, Encoding.UTF8);

方式四

基于StreamReader,一行一行讀取,最后拼接并顯示。

            this.rtb_Content.Clear();
            StreamReader sr = new StreamReader(this.txt_FilePath.Text, Encoding.UTF8);
            string line = sr.ReadLine();
            while (line != null)
            {
                this.rtb_Content.AppendText(line);
                line = sr.ReadLine();
                if (line != null)
                {
                    this.rtb_Content.AppendText("\r\n");
                }
            }
            sr.Close();

方式五

基于StreamReader,一次性讀取到結尾,最后顯示。

            this.rtb_Content.Clear();
            StreamReader sr = new StreamReader(this.txt_FilePath.Text, Encoding.UTF8);
            this.rtb_Content.Text = sr.ReadToEnd();
            sr.Close();

方式六

基于StreamReader,一行一行讀取,通過EndOfSteam判斷是否到結尾,最后拼接并顯示。

            this.rtb_Content.Clear();
            StreamReader sr = new StreamReader(this.txt_FilePath.Text, Encoding.UTF8);

            while (!sr.EndOfStream)
            {
                this.rtb_Content.AppendText(sr.ReadLine());
                if (!sr.EndOfStream)
                {
                    this.rtb_Content.AppendText("\r\n");
                }
            }
            sr.Close();

方式七

基于FileStream和StreamReader來實現。

            this.rtb_Content.Clear();
            FileStream fs = new FileStream(this.txt_FilePath.Text, FileMode.Open, FileAccess.Read);
            StreamReader sr = new StreamReader(fs, Encoding.UTF8);
            this.rtb_Content.Text = sr.ReadToEnd();
            fs.Close();
            sr.Close();

總結

以上7種方式主要是分別基于FileStream、File和StreamReader這三種來實現的,這三種方式的區(qū)別在于:

FileStream類可以對任意類型的文件進行讀取操作,而且我們也可以按照需要指定每一次讀取字節(jié)長度,以此減少內存的消耗,提高讀取效率。

StreamReader的特點是,它只能對文本文件進行讀寫操作,可以一行一行的寫入和讀取。

File類它是一個靜態(tài)類,當我們查看file類的那些靜態(tài)方法時,我們可以發(fā)現,在這個類里面的方法封裝了可以執(zhí)行文件讀寫操作的對象,例如:Filestream,StreamReader,我們通過File去執(zhí)行任何文件的讀寫操作時,實際上是使用FileStream或SteamReader對象來執(zhí)行文件的讀寫操作,代碼如下所示:

        public static string ReadAllText(string path, Encoding encoding)
        {
            if (path == null)
            {
                throw new ArgumentNullException("path");
            }
            if (encoding == null)
            {
                throw new ArgumentNullException("encoding");
            }
            if (path.Length == 0)
            {
                throw new ArgumentException(Environment.GetResourceString("Argument_EmptyPath"));
            }

            return InternalReadAllText(path, encoding, checkHost: true);
        }
        
        private static string InternalReadAllText(string path, Encoding encoding, bool checkHost)
        {
            using (StreamReader streamReader = new StreamReader(path, encoding, detectEncodingFromByteOrderMarks: true, StreamReader.DefaultBufferSize, checkHost))
            {
                return streamReader.ReadToEnd();
            }
        } 

方法補充

在 C# 中讀取文本文件有多種方式,每種方式適用于不同的場景。下面從簡單到復雜,介紹最常用的方法,并提供代碼示例和選型建議。

快速選擇(速查表)

需求推薦方法代碼量內存占用適用場景
一次性讀取整個文件File.ReadAllText極少高(整個文件)小文件(< 10 MB)
按行讀入數組File.ReadAllLines極少小文件,需要每行獨立處理
逐行處理(不占內存)File.ReadLines低(流式)大文件,逐行處理
手動控制編碼/緩沖StreamReader中等可控需要精細控制讀取過程
異步讀?。ú蛔枞鸘I)StreamReader.ReadToEndAsync中等WinForm/WPF 等需要保持界面響應
讀取大型文件并解析StreamReader.ReadLine + 循環(huán)中等超大日志文件、CSV 解析等

1. 最簡單:File.ReadAllText —— 一次讀取全部文本

using System.IO;

string content = File.ReadAllText("file.txt", Encoding.UTF8);
Console.WriteLine(content);

特點:代碼最簡潔,直接將文件內容讀入一個字符串。適合小文件,大文件會消耗大量內存。

可選編碼參數Encoding.UTF8Encoding.DefaultEncoding.ASCII 等。

2. 按行讀取為數組:File.ReadAllLines

string[] lines = File.ReadAllLines("file.txt", Encoding.UTF8);
foreach (string line in lines)
{
    Console.WriteLine(line);
}

特點:返回字符串數組,每行一個元素。同樣適合小文件。

3. 逐行流式讀?。篎ile.ReadLines —— 推薦處理大文件

foreach (string line in File.ReadLines("file.txt", Encoding.UTF8))
{
    Console.WriteLine(line);
    // 處理每行,不會一次性加載整個文件
}

特點:返回 IEnumerable<string>,使用 yield 實現延遲執(zhí)行,內存效率極高。推薦用于任何大小的文本文件。

4. 手動流式讀?。篠treamReader(更精細控制)

using (StreamReader reader = new StreamReader("file.txt", Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
    // 若需一次性讀到底:string all = reader.ReadToEnd();
}

特點:可以控制緩沖區(qū)大小、位置(BaseStream.Seek)等。適合需要自定義解析邏輯的場景。

5. 異步讀?。╓inForm/WPF/ASP.NET Core 中保持響應)

using (StreamReader reader = new StreamReader("file.txt", Encoding.UTF8))
{
    string content = await reader.ReadToEndAsync();
    // 或 async 逐行:
    // while ((line = await reader.ReadLineAsync()) != null) { ... }
}

特點:異步方法不會阻塞調用線程,適合 UI 程序或高并發(fā)服務器端。

6. 讀取指定編碼的文件(如 GB2312)

// 需注冊編碼提供程序(.NET Core 需額外添加)
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
Encoding gb2312 = Encoding.GetEncoding("GB2312");
string content = File.ReadAllText("gbk_file.txt", gb2312);

注意:.NET Core/.NET 5+ 默認不支持 GB18030 等擴展編碼,需添加 System.Text.Encoding.CodePages 包。

性能與內存對比

方法內存峰值適用文件大小讀取速度(小文件)讀取速度(大文件)
ReadAllText文件大小的 2~3 倍< 50 MB極慢/可能 OOM
ReadAllLines文件大小的 ~2 倍 + 每行對象開銷< 50 MB較快慢/可能 OOM
ReadLinesO(1)(只緩存當前行)不限中等(需迭代)快(流式)
StreamReader.ReadLineO(1)不限中等

結論:處理超過 100 MB 的大文件,務必使用 File.ReadLines 或 StreamReader。

到此這篇關于基于C#實現文本讀取的常用方式詳解的文章就介紹到這了,更多相關C#文本讀取內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C#實現給DataGrid單元行添加雙擊事件的方法

    C#實現給DataGrid單元行添加雙擊事件的方法

    這篇文章主要介紹了C#實現給DataGrid單元行添加雙擊事件的方法,較為詳細的分析了C#給DataGrid單元添加雙擊事件的步驟及相關實現代碼,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • C#實現附件上傳和下載功能

    C#實現附件上傳和下載功能

    這篇文章主要介紹了C#實現附件上傳和下載功能,需要的朋友可以參考下
    2015-11-11
  • C#中怎樣從指定字符串中查找并替換字符串?

    C#中怎樣從指定字符串中查找并替換字符串?

    本篇文章,小編為大家介紹一下,C#中怎樣從指定字符串中查找并替換字符串?有需要的朋友可以參考一下
    2013-04-04
  • c#中executereader執(zhí)行查詢示例分享

    c#中executereader執(zhí)行查詢示例分享

    這篇文章主要介紹了c#中executereader執(zhí)行查詢示例,需要的朋友可以參考下
    2014-04-04
  • C#窗體間常用的幾種傳值方式及委托與事件詳解

    C#窗體間常用的幾種傳值方式及委托與事件詳解

    這篇文章主要給大家介紹了關于C#窗體間常用的幾種傳值方式及委托與事件的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用小程序具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-06-06
  • C#嵌套類的訪問方法

    C#嵌套類的訪問方法

    這篇文章主要介紹了C#嵌套類的訪問方法,本文給出了嵌套類代碼和訪問方法代碼,不會的同學照搬對照中的方法即可,需要的朋友可以參考下
    2015-04-04
  • Unity實現背景圖片淡入淡出效果

    Unity實現背景圖片淡入淡出效果

    這篇文章主要為大家詳細介紹了Unity實現背景圖片淡入淡出,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#中實現Json序列化與反序列化的幾種方式

    C#中實現Json序列化與反序列化的幾種方式

    C#中實現Json的序列化與反序列化也算是個老話題,那么在這篇文章中我們將老話重提,本文中將會學到如何使用C#,來序列化對象成為Json格式的數據,以及如何反序列化Json數據到對象。有需要的朋友們可以參考借鑒,下面來跟著小編一起學習學習吧。
    2016-12-12
  • C#畫筆Pen使用路徑繪制圖形的方法

    C#畫筆Pen使用路徑繪制圖形的方法

    這篇文章主要介紹了C#畫筆Pen使用路徑繪制圖形的方法,涉及C#使用畫筆精確控制繪圖軌跡的相關技巧,需要的朋友可以參考下
    2015-06-06
  • C#中的XML與JSON數據處理的案例詳解

    C#中的XML與JSON數據處理的案例詳解

    在現代軟件開發(fā)中,數據交換和存儲的需求日益增長,而 XML 和 JSON 成為了兩種最常用的數據格式,它們各有特點,在不同的場景下有著各自的優(yōu)勢,本文將從 C# 的角度出發(fā),探討如何處理這兩種數據格式,并分享一些常見的問題及解決方法,需要的朋友可以參考下
    2024-09-09

最新評論

登封市| 定日县| 怀集县| 新昌县| 惠来县| 千阳县| 阿合奇县| 龙南县| 伊川县| 汉寿县| 普宁市| 云和县| 江都市| 赞皇县| 揭西县| 建平县| 徐水县| 东源县| 夹江县| 巩义市| 长春市| 琼结县| 桑植县| 隆尧县| 公安县| 大关县| 青岛市| 安康市| 剑河县| 和平县| 叙永县| 垣曲县| 呈贡县| 新野县| 南川市| 郴州市| 大理市| 阳朔县| 万宁市| 新田县| 新宁县|