0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

基于C#实现文本读取的7种方式是什么

汽车电子技术 来源:dotNet工控上位机 作者: 新阁教育付工 2023-02-22 15:38 次阅读

前言

文本读取在上位机开发中经常会使用到,实现的方式也有很多种,今天跟大家分享一下C#实现读取读取的7种方式。

这里我们先写好了一个测试界面,提供一个文件路径选择的入口,具体如下所示:

图片

方式一

基于FileStream,并结合它的Read方法读取指定的字节数组,最后转换成字符串进行显示。

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,一个字节一个字节读取,放到字节数组中,最后转换成字符串进行显示。

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

方式7

基于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这三种来实现的,这三种方式的区别在于:

  • FileStream类可以对任意类型的文件进行读取操作,而且我们也可以按照需要指定每一次读取字节长度,以此减少内存的消耗,提高读取效率。
  • StreamReader的特点是,它只能对文本文件进行读写操作,可以一行一行的写入和读取。
  • File类它是一个静态类,当我们查看file类的那些静态方法时,我们可以发现,在这个类里面的方法封装了可以执行文件读写操作的对象,例如:Filestream,StreamReader,我们通过File去执行任何文件的读写操作时,实际上是使用FileStream或SteamReader对象来执行文件的读写操作,代码如下所示:
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-

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 字符串
    +关注

    关注

    1

    文章

    578

    浏览量

    20506
  • 上位机
    +关注

    关注

    27

    文章

    941

    浏览量

    54790
  • Read
    +关注

    关注

    0

    文章

    10

    浏览量

    11107
收藏 人收藏

    评论

    相关推荐

    《Visual C# 2008程序设计经典案例设计与实现》---动态读取XMI文件

    《Visual C# 2008程序设计经典案例设计与实现》---动态读取XMI文件.zip
    发表于 07-08 13:21

    Python与C#对比

    简洁优美, 简单,易学。拥有强大的标准库及第三方库。Python的使用范围极广。C#是微软公司推出的一功能强大的高级编程语言,能够迅速、高效地完成Windows平台上的项目开发,被称为未来语言
    发表于 05-14 17:14

    请问c#中该怎么读取数据?

    c#中,选择性读取之前保存好的数据,该怎么读?
    发表于 09-29 10:14

    如何利用C#实现HMACSHA256加密算法呢

    什么是HMAC?如何利用C#实现HMACSHA256加密算法呢?
    发表于 01-20 07:07

    读取并分析GPS数据的GPSReader程序(C#和VB.net版代码)

    读取并分析GPS数据的GPSReader程序(C#和VB.net版代码)
    发表于 05-26 10:01 0次下载
    <b class='flag-5'>读取</b>并分析GPS数据的GPSReader程序(<b class='flag-5'>C#</b>和VB.net版代码)

    C#读取GPS数据的基类工具

    C#读取GPS数据的基类工具
    发表于 02-08 16:56 24次下载

    使用C#实现Arduino与电脑进行串行通讯 - Alex Le

    希望能够给Arduino 串口通信需求都以帮助。 C#通信方式
    发表于 12-25 10:19 28次下载

    C#教程之自制数值文本框组件

    C#教程之自制数值文本框组件,很好的C#资料,快来学习吧。
    发表于 04-20 10:50 10次下载

    C#教程之调用SMTP发送文本内容

    C#教程之调用SMTP发送文本内容,很好的C#资料,快来学习吧。
    发表于 04-20 15:27 5次下载

    C#教程之读取数据库表结构

    C#教程之读取数据库表结构,很好的C#资料,快来学习吧。
    发表于 04-20 15:27 6次下载

    基于C#图书馆管理系统的实现与设计

    基于C#图书馆管理系统的实现与设计
    发表于 01-11 12:42 3次下载

    《Visual C# 2008程序设计经典案例设计与实现》---

    《Visual C# 2008程序设计经典案例设计与实现》---飞舞的雪花
    发表于 02-07 11:40 0次下载

    《Visual C# 2008程序设计经典案例设计与实现》---

    《Visual C# 2008程序设计经典案例设计与实现》---动态读取XMI文件
    发表于 01-18 20:33 0次下载

    《Visual C# 2008程序设计经典案例设计与实现》---

    《Visual C# 2008程序设计经典案例设计与实现》---Visual C# 2008与图形图像
    发表于 01-18 20:33 1次下载

    C#实现ActiveX控件开发与部署

    C#实现ActiveX控件开发与部署(肇庆理士电源技术有限公司鸟瞰图)-该文档为C#实现ActiveX控件开发与部署讲解文档,是一份还算不错的参考文档,感兴趣的可以下载看看,,,,,,
    发表于 09-27 17:36 6次下载
    <b class='flag-5'>C#</b><b class='flag-5'>实现</b>ActiveX控件开发与部署