Logo

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

photo

2022年06月05日

 在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

橙子主题打折出售

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

购买它
本文为原创文章,请注意保留出处!
C#中的UrlEncode 2022年06月05日

右击项目==》添加引用==》.NET==》System.Web==》确定System.Web.Ht...C#中的UrlEncode

热门文章

Navicat Premium 12.0.22 安装与破解 一、安装  NavicatPremium12.0.22的下载链接:https://pan.ba...NavicatPremium12.0.22安装与破解 作者:Pastore Antonio
1515 浏览量
C# JArray与JObject 的使用 STEP1、usingNewtonsoft.Json.Linq;STEP2、如何获取json里的...C#JArray与JObject的使用 作者:Pastore Antonio
1465 浏览量
解决mysql的配置ONLY_FULL_GROUP_BY引起的错误 由于自己的本地网站环境使用了mysql8.0的版本,在测试一个groupby的sql查...解决mysql的配置ONLY_FULL_GROUP_BY引起的错误 作者:Pastore Antonio
1448 浏览量
Windows server 2016 英文服务器安装中文语言包教程 1、下载windowsserver2016语言包下载地址:https://pan.baidu....Windowsserver2016英文服务器安装中文语言包教程 作者:Pastore Antonio
1407 浏览量
assembly(全局程序集缓存)中dll的导入和导出 本文主要讲一下关于assembly中的dll是怎么导入和导出的。浏览量:1,468 作者:Pastore Antonio
1403 浏览量