C# 文档 I/O 操作详解:从基础到高级应用

news/2025/10/5 11:21:54/文章来源:https://www.cnblogs.com/slgkaifa/p/19126402

C# 文档 I/O 操作详解:从基础到高级应用

在软件开发中,文件操作(I/O)是一项基本且重要的功能。无论是读取配置文件、存储用户数据,还是处理日志文件,C# 都提供了丰富的 API 来高效地进行文件读写操作。本文将全面介绍 C# 中的文件 I/O 操作,涵盖基础文件操作、文本/二进制文件读写、流式处理、异步 I/O 以及最佳实践,帮助开发者掌握文件处理的技巧。

1. C# 文件操作基础

C# 的文件操作主要依赖于 System.IO 命名空间,其中 FileDirectoryStreamReaderStreamWriter 等类是核心工具。

1.1 检查文件是否存在

在操作文件之前,通常需要检查文件是否存在:

string filePath = @"C:\example\test.txt";
if (File.Exists(filePath))
{
Console.WriteLine("文件存在");
}
else
{
Console.WriteLine("文件不存在");
}

1.2 创建、删除和移动文件

  • 创建文件

    File.Create(@"C:\example\newfile.txt");
  • 删除文件

    File.Delete(@"C:\example\oldfile.txt");
  • 移动/重命名文件

    File.Move(@"C:\example\oldname.txt", @"C:\example\newname.txt");
  • 复制文件

    File.Copy(@"C:\example\source.txt", @"C:\example\destination.txt");

2. 文本文件的读写

2.1 读取文本文件

C# 提供了多种读取文本文件的方式:

  • File.ReadAllText(读取整个文件)

    string content = File.ReadAllText(filePath);
    Console.WriteLine(content);
  • File.ReadAllLines(逐行读取)

    string[] lines = File.ReadAllLines(filePath);
    foreach (string line in lines)
    {
    Console.WriteLine(line);
    }
  • StreamReader(流式读取,适合大文件)

    using (StreamReader reader = new StreamReader(filePath))
    {
    string line;
    while ((line = reader.ReadLine()) != null)
    {
    Console.WriteLine(line);
    }
    }

     

2.2 写入文本文件

  • File.WriteAllText(覆盖写入)

    File.WriteAllText(filePath, "Hello, World!");
  • File.AppendAllText(追加写入)

    File.AppendAllText(filePath, "\nThis is a new line.");
  • StreamWriter(流式写入)

    using (StreamWriter writer = new StreamWriter(filePath))
    {
    writer.WriteLine("Line 1");
    writer.WriteLine("Line 2");
    }

3. 二进制文件的读写

二进制文件(如图片、音频、数据库文件)需要使用 BinaryReader 和 BinaryWriter

3.1 写入二进制文件

using (BinaryWriter writer = new BinaryWriter(File.Open(filePath, FileMode.Create)))
{
writer.Write(100); // 写入整数
writer.Write(3.14); // 写入双精度浮点数
writer.Write("Hello"); // 写入字符串
}

3.2 读取二进制文件

using (BinaryReader reader = new BinaryReader(File.Open(filePath, FileMode.Open)))
{
int number = reader.ReadInt32();
double pi = reader.ReadDouble();
string text = reader.ReadString();
Console.WriteLine($"Number: {number}, Pi: {pi}, Text: {text}");
}

4. 文件流(FileStream)

FileStream 提供了更底层的文件访问方式,适用于大文件或需要精细控制的情况。

4.1 使用 FileStream 读写文件

// 写入文件
using (FileStream fs = new FileStream(filePath, FileMode.Create))
{
byte[] data = Encoding.UTF8.GetBytes("Hello, FileStream!");
fs.Write(data,
0,
data.Length);
}// 读取文件
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
byte[] buffer = new byte[1024];
int bytesRead = fs.Read(buffer, 0, buffer.Length);
string content = Encoding.UTF8.GetString(buffer, 0, bytesRead);
Console.WriteLine(content);
}

5. 目录操作

除了文件操作,C# 还提供了目录管理功能:

5.1 创建和删除目录

string dirPath = @"C:\example\newfolder";// 创建目录
Directory.CreateDirectory(dirPath);// 删除目录(recursive: true 表示删除非空目录)
Directory.Delete(dirPath, recursive: true);

5.2 遍历目录

// 获取所有文件
string[] files = Directory.GetFiles(dirPath);
foreach (string file in files)
{
Console.WriteLine(file);
}// 获取所有子目录
string[] subDirs = Directory.GetDirectories(dirPath);
foreach (string dir in subDirs)
{
Console.WriteLine(dir);
}

6. 异步文件操作

异步 I/O 可以提高程序性能,特别是在处理大文件时。

6.1 异步读取文件

async Task<string> ReadFileAsync(string path)
{
using (StreamReader reader = new StreamReader(path))
{
return await reader.ReadToEndAsync();
}
}

6.2 异步写入文件

async Task WriteFileAsync(string path, string content)
{
using (StreamWriter writer = new StreamWriter(path))
{
await writer.WriteAsync(content);
}
}

7. 文件操作的最佳实践

  1. 使用 using 语句:确保文件流正确关闭,避免资源泄漏。

  2. 异常处理:捕获 IOExceptionFileNotFoundException 等异常。

  3. 大文件处理:使用流式读取(StreamReader/FileStream)而非一次性读取全部内容。

  4. 路径处理:使用 Path.Combine 拼接路径,避免硬编码:

    string fullPath = Path.Combine(@"C:\example",
    "subfolder",
    "file.txt");
  5. 文件权限检查:在访问文件前检查权限(File.GetAccessControl)。

8. 总结

本文详细介绍了 C# 中的文件 I/O 操作,包括:

  • 基本文件操作(创建、删除、移动、复制)

  • 文本文件的读写(File.ReadAllTextStreamReader

  • 二进制文件的处理(BinaryReader/BinaryWriter

  • 文件流(FileStream)的使用

  • 目录管理(Directory 类)

  • 异步文件操作(ReadAsync/WriteAsync

  • 最佳实践(异常处理、资源释放、路径管理)

掌握这些技术后,你可以高效地处理各种文件操作需求,无论是小型配置文件还是大型数据文件。希望本文对你有所帮助!

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/928184.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

做企业网站需要哪些材料摄影的网站设计特点

使用HTML,CSS及JS实现注册功能中密码强度的显示&#xff0c;根据输入的密码判断并显示用户输入密码的强度等级是高还是低等。 效果演示 代码演示 html内容 <div class"container"><div class"userName-wrapper"><label for"userN…

想学做宝宝食谱上什么网站做软装找产品上哪个网站

概念ARQ:自动重传请求(Automatic Repeat-reQuest,ARQ)是OSI模型中数据链路层的错误纠正协议之一.RTO:Retransmission TimeOutFEC:Forward Error Correctionkcp简介kcp是一个基于udp实现快速、可靠、向前纠错的的协议&#xff0c;能以比TCP浪费10%-20%的带宽的代价&#xff0c;换…

wordpress微信站wordpress tar.xz

以垂直列表形式显示的菜单。 说明&#xff1a; 该组件从API Version 9开始支持。后续版本如有新增内容&#xff0c;则采用上角标单独标记该内容的起始版本。 Menu组件需和bindMenu或bindContextMenu方法配合使用&#xff0c;不支持作为普通组件单独使用。 子组件 包含MenuIt…

2025提升门厂家最新企业品牌推荐排行榜,保温提升门,钢质提升门,消防提升门,分段式提升门,工业提升门公司推荐!

在现代工业高速发展的浪潮下,物流枢纽的高效运转、航空航天基地的精密作业,都离不开提升门这一关键基础设施。它不仅是空间通行的门户,更是保障行业安全高效运行的重要防线。然而,当下提升门市场品牌林立,产品质量…

360网站怎么做定制图片软件

目录 排序算法&#xff08;Sorting algorithm&#xff09;:) 一、定义 二、分类 三、评价标准 排序算法&#xff08;Sorting algorithm&#xff09;:) 一、定义 所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的…

高考数学易错考点02 | 临阵磨枪 - 指南

高考数学易错考点02 | 临阵磨枪 - 指南pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Mon…

知名建站的公司vi视觉设计手册

centos7&#xff0c;vbox复制出来的虚拟机无法ping通。其实这是vbox低版本没有解决的一个小问题&#xff0c;复制过去&#xff0c;主机的mac重新生成了(复制时候一定要选这个选项),但是配置文件的mac还是被复制的主机配置&#xff0c;网上搜索很多方案各种改&#xff0c;其实只…

培训销售网站建设wordpress安装提示500

礼帽运算是用原始图像减去其开运算图像的操作。礼帽运算能够获取图像的噪声信息&#xff0c;或者得到比原始图像的边缘更亮的边缘信息。 例如&#xff0c;图 8-22 是一个礼帽运算示例&#xff0c;其中&#xff1a; 左图是原始图像。中间的图是开运算图像。右图是原始图像减开运…

东莞本地招聘网站有哪些东莞公司注册官网

众所周知&#xff0c;知乎早在几年前就将推荐系统从 Python 转为了 Go。于是乎&#xff0c;一部分人就说 Go 比 Python 好&#xff0c;Go 和 Python 两大社区的相关开发人员为此也争论过不少&#xff0c;似乎&#xff0c;谁也没完全说服谁。 作者&#xff1a;hello架构 大概每…

网站实名认证功能怎么做公司变更地址流程

上一节&#xff0c;掌握了活动的创建&#xff0c;但是在启动器中点击应用的图标只会进入到该应用的主活动&#xff0c;那么&#xff0c;如何从主活动跳转到其他活动呢&#xff1f;显式IntentIntent有多个构造函数&#xff0c;其中一个是Intent(Context packContext,Class<?…

2025升降机厂家最新企业品牌推荐排行榜,固定式升降机,液压升降机,电动升降机,铝合金式升降机公司推荐!

在当前自动化、重型机械、精密设备等领域快速发展的背景下,丝杆升降机作为关键的机械执行机构,其市场需求持续增长。然而,行业内却面临着诸多亟待解决的问题。一方面,市场上丝杆升降机品牌数量众多,产品质量参差不…

在 2025 年安装 Visual Studio 2013

首先提醒一下,Visual Studio 2013 已经停止维护了,除非是怀旧或是某些特殊需求不建议使用这个版本,因此官网也只提供 Visual Studio 2015 的下载。 1.从下面的链接中下载 Visual Studio 2013 Ultimate with Update …

算法伦理与机器学习研究获PROSE奖

两位学者因《伦理算法》一书获得2021年PROSE奖,该书探讨了机器学习算法中的隐私保护、偏见消除等关键技术问题,为构建更安全可靠的AI系统提供了重要见解。某中心学者荣获2021年PROSE奖项 某中心学者兼宾夕法尼亚大学…

【Unity】相机 Cameras - 实践

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

实验1 C语言开发环境使用和数据类型、运算符、表达符

实验1#include<studio.h> int main() {printf(" O \n");printf("<H>\n");printf("I I\n");return 0; }实验2 1 #include<stdio.h>2 int main()3 {4 double a, b,…

UiPath推出全新AI代理开发功能,简化自动化构建流程

UiPath在FUSION用户大会上宣布多项产品更新,包括AI代理构建器、Coded Agents支持、测试云增强等功能,帮助企业快速部署智能自动化解决方案,提升开发效率。UiPath今日在拉斯维加斯举行的用户大会UiPath FUSION上宣布…

2025年T型螺栓厂家TOP企业品牌推荐排行榜,光伏T型螺栓,不锈钢T型螺栓,地铁专用T型螺栓,高铁T型螺栓公司!

在 T 型螺栓行业,随着市场需求的不断增长,各类制造企业层出不穷。然而,产品质量参差不齐、技术水平差异较大、服务保障体系不完善等问题逐渐凸显。部分企业为追求短期利益,降低生产标准,导致产品在强度、抗振性等…

自己做网站怎么编代码快速免费建网站

为什么80%的码农都做不了架构师&#xff1f;>>> 多线程消费队列到指定个数时触发一个生产线程往队列中补充元素&#xff0c;保证队列中有足够的数据供消费&#xff0c;不至于使消费线程等待&#xff0c;也不至于在队列中堆得过多。假设10人消费&#xff0c;先放2个…

购买网域名的网站好住小帮装修案例

企业出海挑战与对策 随着全球化的加速推进&#xff0c;越来越多的企业开始将目光投向海外市场&#xff0c;以寻求更广阔的发展空间。然而&#xff0c;在出海的过程中&#xff0c;企业往往面临着诸多挑战&#xff0c;其中文化差异、法律限制等问题尤为突出。今天运营坛将对这些…

2025 年碳纤维布厂家最新推荐排行榜:精选建筑碳纤维布 ,加固碳纤维布,300克碳纤维布,碳纤维加固布公司

2025 年碳纤维布行业在风电、航空航天及低空经济等领域需求驱动下迎来结构性回暖,T700 + 级高性能产品占比已提升至 36.42%,但市场仍存在痛点:部分企业产品同质化严重,小型厂商偷工减料导致性能不达标,叠加监管漏…