当前位置: 首页 > news >正文

c#_文件的读写 IO

目录

常用文件 IO 操作的表格总结                        表格说明

示例代码

Directory.GetCurrentDirectory()  获取当前程序的运行目录

Directory 获取当前目录

FileStream 文件中任何位置的读写

        写入文件数据 OpenWrite

        读取文件数据 OpenRead

CreateDirectory ()  创建目录 及其子目录

StreamWriter和StreamReader类用于文本文件的数据读写


在 C# 中,文件读写是非常常见的操作,.NET 框架提供了多种方式来处理文件 IO 操作。

常用文件 IO 操作的表格总结:

操作类型方法 / 类适用场景优点缺点
文本文件写入File.WriteAllText()小型文本文件一次性写入代码简洁,无需手动处理流不适合大文件,会一次性加载到内存
文本文件读取File.ReadAllText()小型文本文件一次性读取操作简单,一行代码完成大文件会占用大量内存
按行写入File.WriteAllLines()需按行组织的文本文件直接处理字符串数组不适合增量写入
按行读取File.ReadAllLines()需按行处理的文本文件直接返回字符串数组大文件内存占用高
流式写入StreamWriter大型文件、增量写入内存占用低,可逐步写入代码相对复杂
流式读取StreamReader大型文件、逐行处理内存占用低,可按需读取需要手动处理读取循环
二进制写入FileStream + Write()非文本文件(图片、音频等)处理任意二进制数据需手动管理字节数组
二进制读取FileStream + Read()读取二进制文件能处理各种格式的二进制数据需要处理字节级操作
追加内容File.AppendAllText()向文件末尾添加内容无需打开整个文件不适合频繁追加操作
追加内容StreamWriter(Append 模式)频繁追加的场景可保持连接多次写入需要手动管理流的生命周期

表格说明:

  • 对于小型文本文件,File类的静态方法(如WriteAllTextReadAllText)是最简单高效的选择
  • 对于大型文件或需要逐行处理的场景,StreamReaderStreamWriter更为适合
  • 处理二进制文件(如图像、视频等)时,应使用FileStream
  • 所有涉及流的操作都建议使用using语句,以确保资源正确释放
  • 实际开发中,应根据文件大小、操作频率和数据类型选择合适的方法

示例代码:

static void Main(){// 1. 简单文本写入string text = "Hello, File IO!";File.WriteAllText("test.txt", text);Console.WriteLine("文本写入完成");// 2. 简单文本读取string readText = File.ReadAllText("test.txt");Console.WriteLine("读取内容: " + readText);// 3. 按行写入string[] lines = { "第一行", "第二行", "第三行" };File.WriteAllLines("lines.txt", lines);// 4. 按行读取string[] readLines = File.ReadAllLines("lines.txt");Console.WriteLine("按行读取:");foreach (var line in readLines)Console.WriteLine(line);// 5. 追加内容File.AppendAllText("test.txt", "\n这是追加的内容");// 6. 大文件读取(流式)using (var reader = new StreamReader("large_file.txt")){string line;while ((line = reader.ReadLine()) != null){// 处理每行内容Console.WriteLine("读取行: " + line);}}// 7. 大文件写入(流式)using (var writer = new StreamWriter("large_output.txt")){for (int i = 0; i < 1000; i++){writer.WriteLine($"这是第 {i} 行数据");}}// 8. 二进制文件操作byte[] data = { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"的ASCII码File.WriteAllBytes("binary.dat", data);byte[] readData = File.ReadAllBytes("binary.dat");Console.WriteLine("二进制数据: " + BitConverter.ToString(readData));}

Directory.GetCurrentDirectory()  获取当前程序的运行目录

string path= Directory.GetCurrentDirectory()+ "\\写文件.txt";
FileInfo fi = new FileInfo(path);

或者直接输入路径 对文件执行操作  提供路径  这种路径写法 绝对路径 缺点路径固定 程序发给别人路径不一样程序就不能跑

FileInfo fi = new FileInfo("C:\\Users\\17802\\Desktop\\AISee\\7.30 拆箱装箱 Equals与== 文件读取IO xml文件 事件Event\\3、文件\\写文件.txt");
 Directory 获取当前目录
//Directory 获取当前目录
Console.WriteLine(fi.Directory);//创建文件  当路径不存在时 会创建一个
fi.Directory.Create();

FileStream 文件中任何位置的读写

写入文件数据 OpenWrite
// 1. 打开文件  确定文件流 是写入数据还是读数据  写数据
FileStream stream = fi.OpenWrite();
// 2. 写数据
byte[] bytes = { 1, 2, 3, 4, 5, 6, 7, 8 };
// Write 写入数据 bytes 要写书的数据  写多少? 0 从0开始  写进去bytes.Length 个
stream.Write(bytes, 0, bytes.Length);
// 3. 关闭文件流 释放掉与之关联的所有资源
stream.Close();
Console.WriteLine("写入成功");
读取文件数据 OpenRead
// 读取数据
// 1. 打开文件流 确定是读还是写  读数据
FileStream streamRead = fi.OpenRead();// 2. 将读到的数据放到暂存区 不确定能读取到几个 可以是用FileInfo中的Length属性 获取读取文件中的数据长度
byte[] bytes1 = new byte[fi.Length];
//Read 读数据 并返回读到的数据个数
int a =  streamRead.Read(bytes1, 0, bytes1.Length);
Console.WriteLine(a);
foreach (var item in bytes1)
{Console.WriteLine(item);
}
// 关闭流
streamRead.Close();
CreateDirectory ()  创建目录 及其子目录
Directory.CreateDirectory("文件储存地址");

StreamWriterStreamReader类用于文本文件的数据读写,这些类从抽象基类 Stream 继承。

详细方法可参考:C# 文本文件的读写 StreamReader 和 StreamWriter 类 

internal class Program
{static void Main(string[] args){//写数据  StreamWriter//保存数据的路径string path = Directory.GetCurrentDirectory() + "\\Date\\数据.txt";//使用流写数据 StreamWriterWrite(path);//使用流读数据  StreamReaderRead(path);}public static void Write(string path){//创建一个 StreamWriter 对象来进行数据的编写与保存//参数: 路径  覆盖false还是追加 true数据  编码格式List<string> list = new List<string>() { "张三","李四","王五","小明","小红"};//从字节流中写入字符using (StreamWriter sw = new StreamWriter(path, false ,Encoding.UTF8 )){// 写入数据 数据不换行sw.Write("张三今天打游戏了");sw.Write("李四今天游泳了");//写入数据 数据会换行sw.WriteLine("王五进行吃饭了");sw.WriteLine(123456);sw.WriteLine("测试测试测试");Console.WriteLine("写入成功");sw.WriteLine(list);}}public static void Read(string path){//创建一个 StreamReader 对象来进行数据的读取//从字节流中读取字符using (StreamReader sr = new StreamReader(path)){string str  =  sr.ReadToEnd();string[] strarr = str.Split('\n');for (int i = 0; i < strarr.Length; i++){if (strarr[i].Contains("张三")){Console.WriteLine("存在");}else{Console.WriteLine("不存在");}}}}
}
http://www.lryc.cn/news/605266.html

相关文章:

  • C#_创建自己的MyList列表
  • 【36】C# WinForm入门到精通 —— flowLayoutPanel 控件 拖拽大小 “在父容器中停靠” ,“取消在父容器中停靠”
  • 独立站如何吃掉平台蛋糕?DTC模式下的成本重构与利润跃升
  • Java内存模型(JMM)
  • 地图可视化实践录:显示高德地图和百度地图
  • ica1靶机攻略
  • C#垃圾回收机制:原理与实践
  • 分享一个FPGA寄存器接口自动化工具
  • 时序数据库厂商 TDengine 发布 AI 原生的工业数据管理平台 IDMP,“无问智推”改变数据消费范式
  • 做题笔记:某大讯飞真题28道
  • 万字深度详解DHCP服务:动态IP地址分配的自动化引擎
  • 100万QPS短链系统如何设计?
  • 基于C语言实现的KV存储引擎(一)
  • 3 运算符与表达式
  • 【CVPR2025】FlowRAM:用区域感知与流匹配加速高精度机器人操作策略学习
  • 架构实战——架构重构内功心法第一式(有的放矢)
  • 《Computational principles and challenges in single-cell data integration》
  • SpringMVC 6+源码分析(一)初始化流程
  • 2021 年 NOI 最后一题题解
  • 项目文档太多、太混乱怎么解决
  • C语言高级(构造数据类型)
  • 2020 年 NOI 最后一题题解
  • REST、GraphQL、gRPC、tRPC深度对比
  • 订阅区块,部署合约,加载合约
  • 颐顿机电携手观远BI数据:以数据驱动决策,领跑先进制造智能化升级
  • 流程制造的数字孪生:从黑箱生产到全息掌控
  • Linux c网络专栏第四章io_uring
  • Linux零基础Shell教学全集(可用于日常查询语句,目录清晰,内容详细)(自学尚硅谷B站shell课程后的万字学习笔记,附课程链接)
  • Baumer工业相机堡盟工业相机如何通过YoloV8的深度学习模型实现汽车牌照的位置识别(C#代码,UI界面版)
  • 大厂主力双塔模型实践与线上服务