在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

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

 用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

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

 用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.及时释放

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

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

 4.2.异步操作

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

①开线程

②利用异步

具体请看文末参考文献。

4.3汉字乱码

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

请看我的使用:

(StreamReader)

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

(FileStream)

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

 

5.总结:

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

6.参考文献:

FileStream 类 (System.IO) | Microsoft Docs

StreamReader 类 (System.IO) | Microsoft Docs

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