一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

基于C#實(shí)現(xiàn)文本讀取的7種方式是什么

汽車電子技術(shù) ? 來源:dotNet工控上位機(jī) ? 作者: 新閣教育付工 ? 2023-02-22 15:38 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

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

圖片

方式一

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

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);

方式二

基于FileStream,一個(gè)字節(jié)一個(gè)字節(jié)讀取,放到字節(jié)數(shù)組中,最后轉(zhuǎn)換成字符串進(jì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,一次性讀取到結(jié)尾,最后顯示。

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

方式六

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

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();

方式7

基于FileStream和StreamReader來實(shí)現(xiàn)。

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();

測(cè)試結(jié)果

經(jīng)過測(cè)試,以上每個(gè)方法都可以實(shí)現(xiàn)文本文件的讀取。

圖片

總結(jié)

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

  • FileStream類可以對(duì)任意類型的文件進(jìn)行讀取操作,而且我們也可以按照需要指定每一次讀取字節(jié)長度,以此減少內(nèi)存的消耗,提高讀取效率。
  • StreamReader的特點(diǎn)是,它只能對(duì)文本文件進(jìn)行讀寫操作,可以一行一行的寫入和讀取。
  • File類它是一個(gè)靜態(tài)類,當(dāng)我們查看file類的那些靜態(tài)方法時(shí),我們可以發(fā)現(xiàn),在這個(gè)類里面的方法封裝了可以執(zhí)行文件讀寫操作的對(duì)象,例如:Filestream,StreamReader,我們通過File去執(zhí)行任何文件的讀寫操作時(shí),實(shí)際上是使用FileStream或SteamReader對(duì)象來執(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();
            }
        }

-END-

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 字符串
    +關(guān)注

    關(guān)注

    1

    文章

    589

    瀏覽量

    21218
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    963

    瀏覽量

    55699
  • Read
    +關(guān)注

    關(guān)注

    0

    文章

    10

    瀏覽量

    11246
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---動(dòng)態(tài)讀取XMI文件

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---動(dòng)態(tài)讀取XMI文件.zip
    發(fā)表于 07-08 13:21

    Python與C#對(duì)比

    簡潔優(yōu)美, 簡單,易學(xué)。擁有強(qiáng)大的標(biāo)準(zhǔn)庫及第三方庫。Python的使用范圍極廣。C#是微軟公司推出的一功能強(qiáng)大的高級(jí)編程語言,能夠迅速、高效地完成Windows平臺(tái)上的項(xiàng)目開發(fā),被稱為未來語言
    發(fā)表于 05-14 17:14

    請(qǐng)問c#中該怎么讀取數(shù)據(jù)?

    c#中,選擇性讀取之前保存好的數(shù)據(jù),該怎么讀?
    發(fā)表于 09-29 10:14

    如何利用C#實(shí)現(xiàn)HMACSHA256加密算法呢

    什么是HMAC?如何利用C#實(shí)現(xiàn)HMACSHA256加密算法呢?
    發(fā)表于 01-20 07:07

    讀取并分析GPS數(shù)據(jù)的GPSReader程序(C#和VB.net版代碼)

    讀取并分析GPS數(shù)據(jù)的GPSReader程序(C#和VB.net版代碼)
    發(fā)表于 05-26 10:01 ?0次下載
    <b class='flag-5'>讀取</b>并分析GPS數(shù)據(jù)的GPSReader程序(<b class='flag-5'>C#</b>和VB.net版代碼)

    C#讀取GPS數(shù)據(jù)的基類工具

    C#讀取GPS數(shù)據(jù)的基類工具
    發(fā)表于 02-08 16:56 ?24次下載

    C語言入門教程-讀取文本文件

    讀取文本文件若要讀取一個(gè)文件,請(qǐng)使用r模式打開。一般來說,讀取文件時(shí)最好不要用fscanf,因?yàn)椋俏募臄?shù)據(jù)格式非常標(biāo)準(zhǔn),否則fscanf并不能準(zhǔn)確地
    發(fā)表于 07-29 11:29 ?2979次閱讀

    使用C#實(shí)現(xiàn)Arduino與電腦進(jìn)行串行通訊 - Alex Le

    希望能夠給Arduino 串口通信需求都以幫助。 C#通信方式
    發(fā)表于 12-25 10:19 ?28次下載

    C#教程之自制數(shù)值文本框組件

    C#教程之自制數(shù)值文本框組件,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 10:50 ?10次下載

    C#教程之調(diào)用SMTP發(fā)送文本內(nèi)容

    C#教程之調(diào)用SMTP發(fā)送文本內(nèi)容,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 15:27 ?5次下載

    C#教程之讀取數(shù)據(jù)庫表結(jié)構(gòu)

    C#教程之讀取數(shù)據(jù)庫表結(jié)構(gòu),很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 15:27 ?6次下載

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---飛舞的雪花
    發(fā)表于 02-07 11:40 ?0次下載

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---動(dòng)態(tài)讀取XMI文件
    發(fā)表于 01-18 20:33 ?0次下載

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---

    《Visual C# 2008程序設(shè)計(jì)經(jīng)典案例設(shè)計(jì)與實(shí)現(xiàn)》---Visual C# 2008與圖形圖像
    發(fā)表于 01-18 20:33 ?1次下載

    C#實(shí)現(xiàn)ActiveX控件開發(fā)與部署

    C#實(shí)現(xiàn)ActiveX控件開發(fā)與部署(肇慶理士電源技術(shù)有限公司鳥瞰圖)-該文檔為C#實(shí)現(xiàn)ActiveX控件開發(fā)與部署講解文檔,是一份還算不錯(cuò)的參考文檔,感興趣的可以下載看看,,,,,,
    發(fā)表于 09-27 17:36 ?6次下載
    <b class='flag-5'>C#</b><b class='flag-5'>實(shí)現(xiàn)</b>ActiveX控件開發(fā)與部署