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

掌握 C# 文件和输入输出操作

在任何编程语言中,文件和输入输出操作(I/O)都是非常重要的组成部分。C# 提供了一系列工具和类来帮助开发者处理文件的读取、写入、二进制文件的处理以及数据的序列化与反序列化。本文将介绍 C# 中的文件操作,包括 File 类、StreamReaderStreamWriter,以及如何处理二进制文件和数据序列化与反序列化。


1. 文件读取与写入

C# 中的文件操作主要通过 System.IO 命名空间中的类来实现。常见的类有 FileStreamReaderStreamWriter,它们可以帮助你轻松地处理文件的读取和写入。

使用 File 类

File 类提供了直接对文件进行操作的静态方法,如读取和写入文件。

// 写入文件
File.WriteAllText("example.txt", "Hello, C#!");// 读取文件
string content = File.ReadAllText("example.txt");
Console.WriteLine(content);  // 输出:Hello, C#!

File 类还提供了其他实用方法,例如 File.Exists() 用于检查文件是否存在,File.Delete() 用于删除文件等。

使用 StreamReader 和 StreamWriter

StreamReader 和 StreamWriter 是用于处理文本文件的流类,适合处理较大文件或需要逐行读写的场景。

// 使用 StreamWriter 写入文件
using (StreamWriter writer = new StreamWriter("example.txt"))
{writer.WriteLine("Line 1");writer.WriteLine("Line 2");
}// 使用 StreamReader 读取文件
using (StreamReader reader = new StreamReader("example.txt"))
{string line;while ((line = reader.ReadLine()) != null){Console.WriteLine(line);  // 输出:Line 1,Line 2}
}

StreamReader 和 StreamWriter 提供了更细粒度的文件操作方式,适合需要逐行读取或写入的场景。


2. 二进制文件处理

除了文本文件,C# 还可以方便地处理二进制文件。使用 BinaryReader 和 BinaryWriter 可以对文件中的二进制数据进行读写。

写入二进制文件

using (BinaryWriter writer = new BinaryWriter(File.Open("data.bin", FileMode.Create)))
{writer.Write(1.23);   // 写入双精度浮点数writer.Write(123);    // 写入整数writer.Write("Hello, binary world!");  // 写入字符串
}

读取二进制文件

using (BinaryReader reader = new BinaryReader(File.Open("data.bin", FileMode.Open)))
{double num1 = reader.ReadDouble();int num2 = reader.ReadInt32();string text = reader.ReadString();Console.WriteLine($"Number 1: {num1}, Number 2: {num2}, Text: {text}");
}

BinaryReader 和 BinaryWriter 是处理二进制文件的主要工具,适合处理非文本数据,如图像、音频或自定义的二进制格式。


3. 序列化与反序列化

序列化 是将对象转换为可存储或传输的格式的过程,反序列化 是将存储格式的数据转换回对象的过程。C# 支持多种序列化格式,如 XML 和 JSON,这些格式非常适合数据持久化和传输。

XML 序列化

C# 提供了 System.Xml.Serialization.XmlSerializer 类用于将对象序列化为 XML 格式,或者将 XML 数据反序列化为对象。

using System.Xml.Serialization;
using System.IO;public class Person
{public string Name { get; set; }public int Age { get; set; }
}// XML 序列化
Person person = new Person { Name = "Alice", Age = 30 };
XmlSerializer serializer = new XmlSerializer(typeof(Person));using (StreamWriter writer = new StreamWriter("person.xml"))
{serializer.Serialize(writer, person);
}// XML 反序列化
using (StreamReader reader = new StreamReader("person.xml"))
{Person deserializedPerson = (Person)serializer.Deserialize(reader);Console.WriteLine($"{deserializedPerson.Name}, {deserializedPerson.Age}");
}

在这个示例中,XmlSerializer 将 Person 对象序列化为 XML 格式并保存到文件中,随后我们可以将其反序列化回对象。

JSON 序列化

C# 还可以使用 System.Text.Json 命名空间来处理 JSON 序列化与反序列化操作。

using System.Text.Json;Person person = new Person { Name = "Alice", Age = 30 };// JSON 序列化
string jsonString = JsonSerializer.Serialize(person);
File.WriteAllText("person.json", jsonString);// JSON 反序列化
string jsonFromFile = File.ReadAllText("person.json");
Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonFromFile);Console.WriteLine($"{deserializedPerson.Name}, {deserializedPerson.Age}");

相比于 XML,JSON 格式更加紧凑,通常用于网络传输或存储配置数据。JsonSerializer 提供了高效的 JSON 序列化与反序列化操作。


结论

C# 为开发者提供了多种方便且高效的文件处理方式。无论是简单的文本文件读写,还是复杂的二进制文件操作,C# 都有相应的工具。此外,序列化与反序列化功能为持久化数据提供了便捷的途径,XML 和 JSON 格式在数据传输和存储中都非常常用。

  • 使用 FileStreamReader 和 StreamWriter 类进行文本文件的处理。
  • 使用 BinaryReader 和 BinaryWriter 进行二进制文件的读写。
  • 使用 XmlSerializer 处理 XML 序列化,使用 JsonSerializer 处理 JSON 序列化。

通过掌握这些工具和方法,你可以更加轻松地处理文件和数据操作,提高代码的可维护性和灵活性。


这篇博客为你介绍了 C# 文件和输入输出的基本操作。如果你有任何问题或者需要更详细的示例,欢迎留言或联系我!

相关文章:

掌握 C# 文件和输入输出操作

在任何编程语言中&#xff0c;文件和输入输出操作&#xff08;I/O&#xff09;都是非常重要的组成部分。C# 提供了一系列工具和类来帮助开发者处理文件的读取、写入、二进制文件的处理以及数据的序列化与反序列化。本文将介绍 C# 中的文件操作&#xff0c;包括 File 类、Stream…...

k8s 中的金丝雀发布(灰度发布)

目录 1 什么是金丝雀发布 2 Canary 发布方式 3 Canary 两种发布方式实操 3.1 准备工作 3.1.1 将 nginx 命名两个版本 v1 与 v2 3.1.2 暴露端口并指定微服务类型 3.1.3 进入 pod 修改默认发布文件 3.1.4 测试 service 是否正常 3.2 基于权重的灰度发布 3.2.1 创建 Igress 资源类…...

《IDEA:让编程效率翻倍的强大工具》

哪个编程工具让你的工作效率翻倍&#xff1f; 在众多编程工具中&#xff0c;IntelliJ IDEA 无疑是一款让我的工作效率得到显著提升的利器。 一、功能特点 智能代码补全 IDEA 的代码补全功能极其智能。它不仅能根据你输入的前缀快速列出可能的代码选项&#xff0c;还会根据上…...

Docker 部署 Prometheus+Grafana 监控系统快速指南

Docker 部署 PrometheusGrafana 监控系统快速指南 文章目录 Docker 部署 PrometheusGrafana 监控系统快速指南一 创建网络二 监控部署三 配置 prometheus.yml四 测试部署是否成功五 Grafana表盘下载 本文详细介绍了通过 Docker 和 Docker Compose 快速部署 Prometheus 和 Grafa…...

No.8 笔记 | SQL 查询语句:数据探索的钥匙

2024/10/7 心记 - 致在路上默默奋斗的你 在当今数字化的时代&#xff0c;网络安全已成为我们生活中不可或缺的一部分。它如同守护数字世界的隐形盾牌&#xff0c;保护着我们的隐私、数据和整个社会的稳定运行。 学习网络安全&#xff0c;是踏上一段充满挑战与机遇的征程。 每一…...

全局数据在Python包中模块间管理方法探讨

在开发大型 Python 应用程序时&#xff0c;有时需要多个模块共享和管理全局数据。如何优雅地在 Python 包内的不同模块间共享全局数据是一个常见的设计问题。我们希望避免全局变量的混乱和难以维护的代码&#xff0c;但同时能够安全、高效地管理这些共享数据。 下面我们将探讨…...

无人机在矿业领域的应用!

矿区测绘与建模 无人机可以快速、全面地获取矿区的地形地貌数据&#xff0c;生成高精度的二维或三维模型。 这些模型可用于矿区的规划、设计、监测和管理&#xff0c;提高矿山的生产效率。 库存量量化监测 无人机能够捕捉厘米级的地形数据&#xff0c;通过计算得出准确的库…...

基于JavaWeb开发的java springmvc+mybatis学生考试系统设计和实现

基于JavaWeb开发的java springmvcmybatis学生考试系统设计和实现 &#x1f345; 作者主页 网顺技术团队 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f4dd; &#x1f345; 文末获取源码联系方式 &#x1f4dd; &#x1f345; 查看下方微信号获取联系方式 承接各…...

【CKA】四、etcd的备份与恢复

4、etcd的备份与恢复 1. 考题内容&#xff1a; 2. 答题思路&#xff1a; 1、ssh到有etcdctl、etcdutl命令的节点 2、备份时注意添加证书并保证路径正确 3、备份完可以验证下 4、恢复备份时要停服务&#xff0c;恢复备份后重启kubelet 题型是一样的&#xff0c;我考的证书的路…...

基于Arduino的SG90舵机驱动

一.SG90舵机引脚说明 SG90舵机三根线的连接方法&#xff1a; 1.红色线&#xff1a;电源线&#xff08;VCC&#xff09;&#xff0c;接入5v电源 2.棕色线&#xff1a;地线&#xff08;GND&#xff09;&#xff0c;接地 3.黄色线&#xff1a;信号线&#xff08;SIG&#xff09;…...

大模型泡沫破了?| 转行建筑师混战大模型圈

最近秋招惨淡卷动&#xff0c;**地产天坑不敢进&#xff0c;科技大厂不可期。**阿里直裁应届生、腾讯拉长职级晋升时间&#xff0c;字节一家繁荣&#xff0c;但也在和美国政府大打官司。此前「大模型」风生水起&#xff0c;但近期融资、应用双双预冷。 GPT-5迟迟不出&#xff0…...

Windows开发工具使用技巧

Windows开发工具使用技巧 在Windows系统下进行软件开发时&#xff0c;掌握并熟练使用合适的开发工具可以极大地提高工作效率和代码质量。本篇文章将介绍几款常见的Windows开发工具及其使用技巧&#xff0c;涵盖集成开发环境&#xff08;IDE&#xff09;、命令行工具、版本控制…...

【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...

【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速… 【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速… 文章目录 【PyTorch学习-1】张量操作|自动求导|神经网络模块|优化器|数据加载与处理|GPU 加速...前言…...

Leecode热题100-560.和为k的子数组

给你一个整数数组 nums 和一个整数 k &#xff0c;请你统计并返回 该数组中和为 k 的子数组的个数 。 子数组是数组中元素的连续非空序列。 示例 1&#xff1a; 输入&#xff1a;nums [1,1,1], k 2 输出&#xff1a;2示例 2&#xff1a; 输入&#xff1a;nums [1,2,3], k…...

Mac 卸载 IDEA 流程

1、现在应用程序中删除Idea 2、进入Library目录 cd /Users/zhengzhaoxiang/Library 3、删除IntelliJIdea2023.3&#xff08;根据自己的版本而定&#xff09;记得进去看下是否删除干净了 rm -rf Logs/JetBrains/IntelliJIdea2023.3 rm -rf Preferences/com.jetbrains.intel…...

vue3 antdv3/4 Modal显示一个提示,内容换行显示。

1、官网地址&#xff1a; Ant Design Vue — An enterprise-class UI components based on Ant Design and Vue.js 2、显示个信息&#xff1a; Modal.info({title: This is a notification message,content: h(div, {}, [h(p, some messages...some messages...),h(p, some …...

Jgit的使用

Jgit的使用 文章目录 Jgit的使用一&#xff0c;git操作的对应代码1.1 查看操作1.1.1 打开仓库1.1.3 获取状态信息 1.2 添加操作1.2.1 初始化本地仓库1.2.2 创建一个新文件并写入内容1.2.3 添加指定&#xff08;所有&#xff09;文件到暂存区1.2.4 提交操作1.2.5 连接并推送到远…...

SQL Server—约束和主键外键详解

SQL Server—约束和主键外键详解 约束和主键外键 主键 和 外键 -- 主键: 关系型数据库中一条记录有若干个属性&#xff0c;若其中某一个属性能够位置标识这条记录&#xff0c;这个属性就可以设置为表的主键&#xff0c;主键是确定一条记录的唯一标识&#xff0c;有可能作为主键…...

信息学奥赛复赛复习14-CSP-J2021-03网络连接-字符串处理、数据类型溢出、数据结构Map、find函数、substr函数

PDF文档回复:20241007 1 P7911 [CSP-J 2021] 网络连接 [题目描述] TCP/IP 协议是网络通信领域的一项重要协议。今天你的任务&#xff0c;就是尝试利用这个协议&#xff0c;还原一个简化后的网络连接场景。 在本问题中&#xff0c;计算机分为两大类&#xff1a;服务机&#x…...

Allegro如何合并同名网络铜皮操作指导

Allegro如何合并同名网络铜皮操作指导 Allegro可以将同名网络的铜皮合并起来&#xff0c;如下图&#xff0c;需要把下面两块铜皮合并成一块铜皮 具体操作如下 选择Shape 选择merge shapes Find选择shapes 点击其中一块铜皮&#xff0c;会被亮起来 再点击另外一块铜皮 两块铜皮…...

【探测器】线阵相机中的 TDI 技术

【探测器】线阵相机中的 TDI 技术 1.背景2.TDI相机3.场景应用 1.背景 TDI 即Time Delay Integration时间延迟积分。 TDI相机是线阵相机的一种特殊类型&#xff0c;带有独特的时间延迟积分&#xff08;TDI&#xff09;技术。 换句话说&#xff0c;TDI相机是线阵相机的一个高级版…...

k8s 之安装metrics-server

作者&#xff1a;程序那点事儿 日期&#xff1a;2024/01/29 18:25 metrics-server可帮助我们查看pod的cpu和内存占用情况 kubectl top po nginx-deploy-56696fbb5-mzsgg # 报错&#xff0c;需要Metrics API 下载 Metrics 解决 wget https://github.com/kubernetes-sigs/metri…...

java学习-idea编辑器基础使用设置

首先打开电脑中的idea编辑器&#xff0c;点击头部&#xff1a;File按钮 → Settings… 打开设置界面&#xff1b; 设置idea的主题 设置idea代码注释的字体颜色 设置idea编辑器的字体和字体大小 设置idea通过提示回车自动导入包 设置idea输入忽略大小写进行提示...

PDSCH(物理下行共享信道)简介

文章目录 PDSCH&#xff08;物理下行共享信道&#xff09;简介1. Transport block CRC attachment2. LDPC base graph selection3. Code block segmentation And Code Block CRC Attachment4. Channel Coding5. Rate Matching6. Code Block Concatenation7. Scrambling8. Modul…...

hutool bug

Hutool参考文档 不用随便升级版本 版本5.8 1&#xff1a; 不要用 ReflectUtil.newInstance(cName); * 和spring 部分框架整合 &#xff0c;子类转换为父类或者接口失败&#xff0c;报转换失败的错误 https://gitee.com/dromara/hutool/issues/I18NCR?skip_mobiletrue 改成使…...

69.x的平方根 367.完全有效的平方数

题目:69. x 的平方根 - 力扣&#xff08;L69eetCode&#xff09; 经典平方根问题&#xff0c;用二分法慢慢逼近找开方值&#xff0c;注意mid*mid要用long long值&#xff0c;不然会溢出 class Solution { public:int mySqrt(int x) {int left 0; int right x;int ans -1; w…...

Android Automotive(一)

目录 什么是Android Automotive Android Automotive & Android Android Automotive 与 Android Auto 什么是Android Automotive Android Automotive 是一个基础的 Android 平台,它能够运行预装的车载信息娱乐系统(IVI)应用程序,以及可选的二方和三方 Android 应用程…...

命令设计模式

简介 命令模式&#xff08;Command Pattern&#xff09;是对命令的封装&#xff0c;每一个命令都是一个操作&#xff1a;请求方发出请求要求执行一个操作&#xff1b;接收方收到请求&#xff0c;并执行操作。命令模式解耦了请求方和接收方&#xff0c;请求方只需请求执行命令&…...

探索智能新境界:最好用的AI工具盘点

你用过最好用的AI工具有哪些&#xff1f; 在人工智能技术飞速发展的今天&#xff0c;AI工具正逐渐成为我们工作和生活中不可或缺的助手。它们不仅提高了效率&#xff0c;还为我们提供了创新的解决方案。作为一名对AI充满热情的用户&#xff0c;我有幸体验了许多优秀的AI工具。…...

【Redis】持久化(下)-- AOF

文章目录 AOF概念如何使用AOFAOF工作流程命令写入演示文件同步策略 AOF的重写机制概念触发重写机制AOF重写流程 启动时数据恢复混合持久化总结 AOF 概念 AOF持久化:以独立日志的方式记录每次的写命令,重启时再重新执行AOF文件中的命令达到恢复数据的目的.AOF的主要作用是解决…...