【C# 基础精讲】文件读取和写入

news/2025/3/14 17:03:18/

在这里插入图片描述

文件读取和写入是计算机程序中常见的操作,用于从文件中读取数据或将数据写入文件。在C#中,使用System.IO命名空间中的类来进行文件读写操作。本文将详细介绍如何在C#中进行文件读取和写入,包括读取文本文件、写入文本文件、读取二进制文件和写入二进制文件等操作。

1. 读取文本文件

要读取文本文件,可以使用StreamReader类。以下是一个读取文本文件的示例:

using System;
using System.IO;class Program
{static void Main(string[] args){string filePath = "sample.txt";try{using (StreamReader reader = new StreamReader(filePath)){string content = reader.ReadToEnd();Console.WriteLine("文件内容:");Console.WriteLine(content);}}catch (FileNotFoundException){Console.WriteLine("文件不存在:" + filePath);}catch (Exception ex){Console.WriteLine("发生异常:" + ex.Message);}}
}

在上述示例中,我们使用StreamReader打开文件并使用ReadToEnd方法读取整个文件内容。通过using语句,确保在使用完StreamReader后自动释放资源。

2. 写入文本文件

要写入文本文件,可以使用StreamWriter类。以下是一个写入文本文件的示例:

using System;
using System.IO;class Program
{static void Main(string[] args){string filePath = "output.txt";try{using (StreamWriter writer = new StreamWriter(filePath)){writer.WriteLine("Hello, world!");writer.WriteLine("This is a line of text.");}Console.WriteLine("文件写入成功:" + filePath);}catch (Exception ex){Console.WriteLine("发生异常:" + ex.Message);}}
}

在上述示例中,我们使用StreamWriter打开文件并使用WriteLine方法写入文本。同样,通过using语句,确保在使用完StreamWriter后自动释放资源。

3. 读取二进制文件

要读取二进制文件,可以使用BinaryReader类。以下是一个读取二进制文件的示例:

using System;
using System.IO;class Program
{static void Main(string[] args){string filePath = "binary.dat";try{using (BinaryReader reader = new BinaryReader(File.OpenRead(filePath))){int intValue = reader.ReadInt32();double doubleValue = reader.ReadDouble();Console.WriteLine("整数值:" + intValue);Console.WriteLine("双精度值:" + doubleValue);}}catch (FileNotFoundException){Console.WriteLine("文件不存在:" + filePath);}catch (Exception ex){Console.WriteLine("发生异常:" + ex.Message);}}
}

在上述示例中,我们使用BinaryReader读取二进制文件中的整数和双精度值。

4. 写入二进制文件

要写入二进制文件,可以使用BinaryWriter类。以下是一个写入二进制文件的示例:

using System;
using System.IO;class Program
{static void Main(string[] args){string filePath = "binary_output.dat";try{using (BinaryWriter writer = new BinaryWriter(File.OpenWrite(filePath))){int intValue = 42;double doubleValue = 3.14159;writer.Write(intValue);writer.Write(doubleValue);}Console.WriteLine("二进制文件写入成功:" + filePath);}catch (Exception ex){Console.WriteLine("发生异常:" + ex.Message);}}
}

在上述示例中,我们使用BinaryWriter写入整数和双精度值到二进制文件。

5. 文件读写的注意事项

  • 在进行文件读写操作时,始终确保正确地处理异常。文件可能不存在、无法访问或者发生其他问题,您应该能够适当地捕获并处理这些异常。

  • 在使用StreamReaderStreamWriter时,使用using语句来自动释放资源。这有助于防止资源泄漏。

  • 对于二进制文件的读写,要确保按照相同的顺序和格式读写数据。不同的数据类型可能占用不同的字节数,需要保持一致。

6. 总结

文件读取和写入是C#中常见的操作,用于从文件中读取数据或将数据写入文件。通过System.IO命名空间中的类,您可以轻松实现文本文件和二进制文件的读写操作。无论是读取文本文件、写入文本文件,还是读取二进制文件、写入二进制文件,都需要注意异常处理、资源释放以及数据格式的一致性。通过掌握文件读写技巧,您可以更好地处理和管理文件数据,从而提高程序的灵活性和功能。


http://www.ppmy.cn/news/1040570.html

相关文章

Java开源项目mall学习笔记(1)——项目初始化

一、学习声明与项目介绍 该笔记是记录学习开源项目mall过程的文档笔记,完全原创,转载请声明。同时也对开源项目的作者表示感谢! mall: 🔥 mall项目是一套基于 SpringBoot Vue uni-app 实现的电商系统,包括前台商城项…

Rx.NET in Action 第一章学习笔记

Part 1 初入反应式扩展 什么是反应式程序?它们有什么用?使用反应式扩展(Rx)编程,会如何改变你编写代码的方式?在开始使用 Rx 之前应该做些什么?为什么 Rx 比传统的事件驱动编程更好&#xff1f…

迷宫DFS问题(二维vector, pair,模板题)

HJ43 迷宫问题 #include <bits/stdc.h> using namespace std;void dfs(vector<vector<int>>& map, vector<pair<int,int>>& paths, int x, int y){//记录走过,更新路径// cout << x << y << endl;map[x][y] 1;pair&…

WebGL游戏站优化实录【myshmup.com】

myshmup.com 允许在浏览器中创建 shmup&#xff08;射击&#xff09;游戏。 你可以使用具有创意通用许可证的资源或上传自己的艺术作品和声音。 创建的游戏可以在网站上发布。 该平台不需要编码&#xff0c;游戏对象的配置是在用户界面的帮助下执行的。 后端是使用Django框架开…

音视频实时通话解决方案

1、问题提出 想要实现音视频通话,对于大部分人可能会觉得很难,但是实际上,有些事情并没有大家想的那样困难,只要功夫深,铁杵磨成针。 机缘巧合下,在业务中,我也遇到了一个业务场景需要实现音视频通话,我们不可能自己从零开始干,我本次用到的核心是WebRTC。 2、WebRT…

AMD卡启动Stable Diffusion AI绘画的方法

WindowsAMD安装法 1.安装python 3.10.6&#xff0c;在python官网上下载安装程序&#xff0c;***重要*** 在安装的第一个窗口下方勾选“将python添加到path”。 2.安装git 3.WindowsAMD使用AUTOMATIC1111的directml这一个fork&#xff0c;在这个页面的第一段&#xff1a;https:/…

一文教你快速 Cloudreve搭建云盘系统,实现随时访问

文章目录 1、前言2、本地网站搭建2.1 环境使用2.2 支持组件选择2.3 网页安装2.4 测试和使用2.5 问题解决 3、本地网页发布3.1 cpolar云端设置3.2 cpolar本地设置 4、公网访问测试5、结语 1、前言 自云存储概念兴起已经有段时间了&#xff0c;各互联网大厂也纷纷加入战局&#…

【Map】containsKey和containsValue使用案例(114)

containsKey() 是看有没有这个键&#xff0c;也就是有没有这个下标 containsValue() 是看有没有这个键值&#xff0c;也就是有没有这个值 比如 mp.add (10,20); containsKey (10) 是 true containsValue (10) 是 false 而containsValue (20) 是 true 区别就是&#xff1a; 前者…