C# FileStream

FileStream

学习一下在 C# 中如何使用 FileStream 读写文件,FileStream 为文件提供流操作,同时支持同步和异步读写操作。Stream 是从源到目的地的数据流。源或目的地可以是磁盘、内存、套接字或其他程序。

FileStream 写入文本

通过使用 FileStream 将一段文本写入文件中。

c# 复制代码
var dataFilePath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, "Files"));

using var fileStream = File.OpenWrite(Path.Combine(dataFilePath, "data.txt"));
byte[] dataBytes = Encoding.UTF8.GetBytes("hello world");

fileStream.Write(dataBytes, 0, dataBytes.Length);
Console.WriteLine("OK");

File.OpenWrite 方法以写入模式打开 FileStream,把字符串转换为字节,最后使用 Write 将字节写入 FileStream。

StreamWriter 写入文本

StreamWriter 是 C# 中的适配器流,FileStream 仅仅支持字节处理,比较抽象,而适配器流封装抽象的字节处理层面,提供处理更高级类型的方法。

c# 复制代码
var dataFilePath = @"C:\Users\29963\Desktop\data\data.txt";

using var fileStream = File.Create(dataFilePath);
using var fileWriter = new StreamWriter(fileStream);

fileWriter.WriteLine("hello world");
Console.WriteLine("OK");

使用 StreamWriter 不需要操作字节,直接调用 WriteLine 方法将字符串数据写入到文件。

FileStream 读取文本

通过 FileStream 从文件中读取数据

c# 复制代码
var dataFilePath = @"C:\Users\29963\Desktop\data\data.txt";
using var fileStream = File.OpenRead(dataFilePath);
byte[] buffer = new byte[1024];
int c;
while ((c = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
    Console.WriteLine(Encoding.UTF8.GetString(buffer, 0, c));
}
Console.WriteLine("OK");

使用 File.OpenRead 打开一个文件进行读取。该方法返回一个 FileStream,以字节形式读取数据,使用 UTF8 编码将它们转换为字符串,最后将字符串写入控制台。注意:Read 方法中第二个参数并不是指从流中哪个位置读取,而是 buffer 数组中开始读写的索引位置。

StreamReader

通过 StreamReader 从流中读取数据更加方便

c# 复制代码
var dataFilePath = @"C:\Users\29963\Desktop\data\data.txt";
using var fileStream = File.OpenRead(dataFilePath);
using var fileReader = new StreamReader(fileStream);
var line = string.Empty;
while ((line = fileReader.ReadLine()) != null)
{
    Console.WriteLine(line);
}
Console.WriteLine("OK");

使用 StreamReader 的 WriteLine 方法读取数据。它返回输入流的下一行,如果到达输入流的末尾,则返回 null。

FileStream CopyTo

CopyTo 方法从当前流中读取字节并将它们写入另一个流。这个方法比较常用,系统中都会有导出文件相关功能,比如导出 excel、word 等等,最后都需要调用 CopyTo 方法,将生成的文件数据流拷贝到内存流中,最后调用上传文件的方法,将内存流传入即可。

c# 复制代码
var fileName = "data1.txt";
using var fs = new FileStream(fileName, FileMode.Open);

var fileName2 = "words_copy.txt";
using var fs2 = new FileStream(fileName2, FileMode.OpenOrCreate);

fs.CopyTo(fs2);

Console.WriteLine("OK");

总结

在 C# 中关于流操作还有很多,也非常复杂。企业项目中,有关文件上传的功能是非常重要的,所以,一定要熟练掌握流的相关操作和原理。

相关推荐
小陈工1 分钟前
2026年3月28日技术资讯洞察:5G-A边缘计算落地、低延迟AI推理革命与工业智造新范式
开发语言·人工智能·后端·python·5g·安全·边缘计算
azhou的代码园1 小时前
基于SpringBoot+微信小程序的图片识别科普系统
spring boot·后端·微信小程序
Tony Bai1 小时前
Rust 看了流泪,AI 看了沉默:扒开 Go 泛型最让你抓狂的“残疾”类型推断
开发语言·人工智能·后端·golang·rust
用户3167361303421 小时前
javaLangchain4j从官方文档入手,看他做了什么——具体使用(二)
后端
無名路人1 小时前
Zsh 脚本 + VS Code 任务:NestJS + Vue3 一键部署到 1Panel
运维·后端·自动化运维
ybwycx2 小时前
springboot之集成Elasticsearch
spring boot·后端·elasticsearch
程途知微3 小时前
AQS 同步器——Java 并发框架的核心底座全解析
java·后端
iPadiPhone3 小时前
分布式架构的“润滑剂”:RabbitMQ 核心原理与大厂面试避坑指南
分布式·后端·面试·架构·rabbitmq
武子康3 小时前
大数据-255 离线数仓 - Apache Atlas 数据血缘与元数据管理实战指南
大数据·后端·apache hive
javaTodo3 小时前
IntelliJ IDEA 2026.1 上强度了:Spring 运行时 Debug + AI 全面接入,太香了
后端