文件流FileStream技术出现的理由漫谈

本文介绍了使用File类和FileStream对象进行文本读写的多种方法,并对比了它们的特点:File类适合一次性处理整个文件,而FileStream适用于逐块处理大型文件,提供更好的内存管理和异步操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

还是废话不多说,一般我们读写文本通过File类中的几个方法是可以满足我们的需求的,如下

   File.ReadAllLines("文件路径")

这个方法读取文本的时候是把文本中的每一行数据读取到一个字符串当中,然后就返回一个字符串数组

   File.ReadAllText("文件路径");

这个方法读取文本的时候是一次性把文本中的全部数据包括换行符读入到一个字符串当中。我们就可以直接输出

   File.ReadAllBytes("文件路径");

这个是按照二进制方法读取出来存入一个二进制数组

写入文本的操作也一样就略

那么问题来了,既然这几个方法可以满足我们文本的读取和写入为什么还要引入FileStream文件流对象
首先我们先谈谈为什么需要这个类;

打个比方,File类可以看成一艘轮船可以把我们的货物全部装上,然后运输到河的对岸。
FileStream类型就可以看成公路上的小货车,假如要把我们的货全部送到目的地,可能需要返回来装很多次。

那么问题很明显,FileStream是把数据拆分成很多小份,慢慢的去运输。回到我们的问题,FileStream每次运输的小份数据会马上完工,使用方可以马上从缓存池拿出来用,File由于量比较大,运输需要时间,使用方只有等待。并且最重要的是,FileStream只需要开小内存存放文本里的数据就可以,而File需要开对应文本那样大的内存去缓存文本内容。
并且FileStream提供了异步读取操作,就是我们在读取的时候还是可以做其他的事,不至于让我们一直在读取文本,不能点击查看UI.

//写文本数据代码
 FileStream fs = new FileStream(_Path1, FileMode.Create);

            string strWord = "同学们大家好,我很牛B啊。";

            //字符串转成byte数组
            byte[] byteArray = Encoding.UTF8.GetBytes(strWord);

            fs.Write(byteArray, 0,byteArray.Length);

            fs.Close();
            //定义文件流
            FileStream fs = new FileStream(_Path1, FileMode.Open);

            //开辟内存区域 缓存读出来的文本数据 用于将来显示在控制台里
            byte[] byteArray = new byte[1024 * 1024]; //1M空间

            //开始读取数据   0表示从缓存内存的第一个字节开始  
            //count 是我们真正读取到的字节数量  比如我们在文件结尾,可能没有1M的数据给我们读
            //这个方法刚好返回的是我们从文本中读取的字节数量
            int count = fs.Read(byteArray, 0, byteArray.Length);


            //开始转码   二进制我们是无法看的  我们需要转成字符串形式
            string str = Encoding.UTF8.GetString(byteArray, 0, count);

            //读取文本操作完成后。我们需要释放一切关于文件流操作申请的计算机资源,不释放的话,操作系统                 是不会主动回收的。我们需要自己去释放
            fs.Close();

            Console.WriteLine(str);
在C#中,将FileStream文件流)保存为文件通常涉及以下几个步骤: 1. **创建FileStream对象**:首先,你需要通过指定文件路径和模式(如读取、写入或追加)来创建FileStream对象。例如: ```csharp using (FileStream fileStream = File.OpenWrite("path_to_your_file.txt")) { /*操作文件流*/ } ``` 2. **读取或写入数据**:如果你已经有了需要保存的数据,可以使用`fileStream.Write()`方法将数据写入文件,如果数据是从其他源获取的,则应先加载到内存。 3. **处理文件内容**:你可以选择直接从另一个文件或程序响应中读取数据,然后将其写入FileStream。例如,读取字符串并写入: ```csharp string data = "Your data to save"; byte[] bytes = Encoding.UTF8.GetBytes(data); fileStream.Write(bytes, 0, bytes.Length); ``` 4. **关闭文件流**:完成所有操作后,记得关闭FileStream以释放系统资源: ```csharp fileStream.Close(); ``` 5. **检查错误**:最好在每个关键操作后检查异常,确保文件操作顺利完成。 **示例完整代码**: ```csharp using System; using System.IO; public void SaveFileStream(string filePath) { try { // 创建文件流并打开以写入 using (FileStream fileStream = File.Create(filePath)) { // 假设data是你要保存的内容 string data = "This is the content to save."; // 转换为字节数组并写入文件 byte[] dataBytes = Encoding.UTF8.GetBytes(data); fileStream.Write(dataBytes, 0, dataBytes.Length); Console.WriteLine($"Data saved at: {filePath}"); } } catch (Exception ex) { Console.WriteLine($"Error saving file: {ex.Message}"); } } ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

你一身傲骨怎能输

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值