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

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.xdnf.cn/news/16627.html

相关文章:

  • 【lucene】使用docvalues的案例
  • AR技术赋能航空维修:精度与效率的飞跃
  • 2025年数学与应用物理国际会议(ICMAP 2025)
  • FFmpeg:因码流采集与封装不同步导致录制出来的MP4文件会出现黑屏、绿屏的问题
  • 服务器安全防护指南:原理剖析与实战对策
  • mac升级安装python3
  • ubuntu编译opendds
  • day25——HTML CSS 前端开发
  • 一款基于 ReactNative 最新发布的`Android/iOS` 新架构文档预览开源库
  • 【AI 数据管理】Text2SQL:当AI成为你和数据库之间的金牌“翻译官”
  • 如何将JPG、PNG、GIF图像转换成PDF、SVG、EPS矢量图像
  • rabbitmq--默认模式(点对点)
  • 应用药品 GMP 证书识别技术,实现证书信息的自动化、精准化提取与核验
  • 【动态规划算法】斐波那契数列模型
  • Linux730 tr:-d /-s;sort:-r,-n,-R,-o,-t,-k,-u;bash;cut:-d,-c;tee -a;uniq -c -i
  • 独立站如何吃掉平台蛋糕?DTC模式下的成本重构与利润跃升
  • sqli-labs:Less-6关卡详细解析
  • KONG API Gateway中的核心概念
  • 图像处理中级篇 [1]—— 彩色照相机的效果与预处理
  • SpringBoot之整合SSM步骤
  • PHP语法高级篇(七):MySQL数据库
  • [论文阅读] 人工智能 + 软件工程 | 增强RESTful API测试:针对MongoDB的搜索式模糊测试新方法
  • 【LINUX网络】使用TCP简易通信
  • 【STM32-HAL】 SPI通信与Flash数据写入实战
  • 国产化再进一步,杰和科技推出搭载国产芯片的主板
  • 【CF】Day115——杂题 (构造 | 区间DP | 思维 + 贪心 | 图论 + 博弈论 | 构造 + 位运算 | 贪心 + 构造 | 计数DP)
  • 代码随想录算法训练营第五十五天|图论part5
  • 【音视频】WebRTC-Web 音视频采集与播放
  • 如何利用 Redis 的原子操作(INCR, DECR)实现分布式计数器?
  • CSS-in-JS 动态主题切换与首屏渲染优化