Logo

Logo

C#如何读取文件内容?(FileStream与StreamReader区别)

Pastore Antonio
Pastore Antonio 2022年06月05日
1139 阅读 0 评论 约 2734 字 阅读约 6 分钟

 在C#中读取文件内容,有两个类可以做到,一个是StreamReader类,一个是FileStream类。那么究竟如何实现?以及他们两个有什么区别?在今后应用中应该使用哪一个?别着急,我一个个来说!


目录

1.开门见山谈区别

2.FileStream

3.StreamReader

4.注意事项

4.1.及时释放

 4.2.异步操作

4.3汉字乱码

5.总结:

6.参考文献:


1.开门见山谈区别

FileStream类提供了在文件中读写字节的方法,但经常使用StreamReader或 StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而StreamReader类操作的是字符数据。因此FileStream类既可以对文本文件进行读写也可以对多媒体文件进行读写,多用于对大文件进行读写,且它对文件可进行分步读写,减小内存压力。而StreamReader和StreamWriter类多用于对小文件读写。

FileStream操作字节,更适合大文件。

StreamReader操作字符,更适合小文件。

2.FileStream

 用FileStream操作文件的方法代码如下:

using System;
using System.IO;
using System.Text;

class Test
{

    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";

        //如果文件存在就删除
        if (File.Exists(path))
        {
            File.Delete(path);
        }

        //创建新文件
        using (FileStream fs = File.Create(path))
        {
            AddText(fs, "This is some text");
            AddText(fs, "This is some more text,");
            AddText(fs, "\r\nand this is on a new line");
            AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");

            for (int i=1;i < 120;i++)
            {
                AddText(fs, Convert.ToChar(i).ToString());
            }
        }

        //读取文件内容
        using (FileStream fs = File.OpenRead(path))
        {
            byte[] b = new byte[1024];
            UTF8Encoding temp = new UTF8Encoding(true);
            while (fs.Read(b,0,b.Length) > 0)
            {
                Console.WriteLine(temp.GetString(b));
            }
        }
    }
    //添加文本内容的方法
    private static void AddText(FileStream fs, string value)
    {
        byte[] info = new UTF8Encoding(true).GetBytes(value);
        fs.Write(info, 0, info.Length);
    }
}

3.StreamReader

 用StreamReader操作文件的方法代码如下:

using System;
using System.IO;

class Test
{
    public static void Main()
    {
        try
        {
            // 读取文本文件
            using (StreamReader sr = new StreamReader("TestFile.txt"))
            {
                string line;
                // ReadLine()一行一行的循环读取
                //当然可以直接ReadToEnd()读到最后
                while ((line = sr.ReadLine()) != null)
                {
                    Console.WriteLine(line);
                }
            }
        }
        catch (Exception e)
        {
            Console.WriteLine(e.Message);
        }
    }
}

4.注意事项

4.1.及时释放

这两种类型使用完毕后都需要对其进行释放!具体说明看下图:

 4.2.异步操作

如果读取的文件内容过大,时间过长,导致界面卡死,那么可以采用两个办法:

①开线程

②利用异步

具体请看文末参考文献。

4.3汉字乱码

编码:gb2312可以保证汉字不出现乱码:

请看我的使用:

(StreamReader)

(FileStream)

 

5.总结:

我们正常操作文件的时候,比如office文件或者txt文本文件,那么使用相对简便的StreamReader就足够了。如果读取音视频文件,那么就要考虑FileStream了!

6.参考文献:

FileStream 类 (System.IO) | Microsoft Docs

StreamReader 类 (System.IO) | Microsoft Docs

https://blog.csdn.net/Hellen0708/article/details/86234801

查看完整代码

橙子主题打折出售

其实我不卖,主要是这里是放广告的,所以就放了一个
毕竟主题都没做完,卖了也是坑.

购买它

附件下载

共 5 个文件
20210827204127271
PNG 18.8 KB
20210827204306377
PNG 20.4 KB
20210827204737812
PNG 102.1 KB
2021082721010833
PNG 172.8 KB
20210827210248705
PNG 140.1 KB
部分文章可能存在转载,如果涉及到侵权,请联系删除文章。

探索AIGC相关的精彩内容,共 15 篇文章

Azure AI 服务之语音识别

简介 Azure AI 服务中的语音识别 API 是微软提供的一项先进技术,旨在帮助开发者轻松实现语 ... C#如何读取文件内容?(FileStream与StreamReader区别)

2026-02-17 · Xzavier Aaron
MCP | 一文详解什么是 MCP以及 MCP 可以做什么

一、什么是 MCP MCP(Model Context Protocol)是一个专为大型语言模型(L ... C#如何读取文件内容?(FileStream与StreamReader区别)

2026-02-14 · Shen, Luke
你的工作流程,值得一个“全自动数字分身”:录制、截图、成文,一气呵成

一、一句话认识 TestFlow Recorder 在数字化工作环境中,如何准确记录操作步骤并生成清 ... C#如何读取文件内容?(FileStream与StreamReader区别)

2026-02-14 · Xzavier Aaron
Flowise 前端框架配置指南

用户需求 问题:有没有适合配置 Flowise 的前端框架? 目标:寻找类似 Open WebUI ... C#如何读取文件内容?(FileStream与StreamReader区别)

2026-02-14 · Xzavier Aaron