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

news/2024/10/3 19:39:33 标签: c#, visual studio, windows, .netcore

在任何编程语言中,文件和输入输出操作(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# 文件和输入输出的基本操作。如果你有任何问题或者需要更详细的示例,欢迎留言或联系我!


http://www.niftyadmin.cn/n/5688881.html

相关文章

计算机毕业设计Python+Spark知识图谱酒店推荐系统 酒店价格预测系统 酒店可视化 酒店爬虫 酒店大数据 neo4j知识图谱 深度学习 机器学习

《PythonSpark知识图谱酒店推荐系统》开题报告 一、研究背景与意义 随着互联网技术的飞速发展和人们生活水平的提高&#xff0c;旅游和酒店行业迎来了前所未有的发展机遇。然而&#xff0c;面对海量的酒店信息和多样化的用户需求&#xff0c;如何快速、准确地为用户推荐符合其…

鸿蒙ArkUI实战开发-主打自研语言及框架

ArkUI 是 HarmonyOS 的声明式 UI 开发框架&#xff0c;而 ArkUI-X 是基于 ArkUI 框架扩展而来的跨平台开发框架。ArkUI-X 支持 HarmonyOS、OpenHarmony、Android 和 iOS 平台&#xff0c;允许开发者使用一套代码构建支持多平台的应用程序。 一、ArkUI-X 的实战开发步骤 在实战开…

Java使用Redis的详细教程

Redis是一个基于内存的key-value结构数据库&#xff0c;即非关系型数据库&#xff0c;具有高性能、丰富的数据类型、持久化、高可用性和分布式等特点。在Java项目中&#xff0c;Redis通常用于缓存、分布式锁、计数器、消息队列和排行榜等场景。以下是在Java中使用Redis的详细教…

docker pull 超时Timeout失败的解决办法

当国内开发者docker pull遇到如下提示时&#xff0c;不要惊讶 [rootvm /]# docker pull postgres Using default tag: latest Error response from daemon: Get "https://registry-1.docker.io/v2/": dial tcp 128.121.146.235:443: i/o timeout [rootvm /]# 自2024…

Excel 表格列序号

给你一个字符串 columnTitle &#xff0c;表示 Excel 表格中的列名称。返回 该列名称对应的列序号 。 例如&#xff1a; A -> 1 B -> 2 C -> 3 ... Z -> 26 AA -> 27 AB -> 28 ... 示例 1: 输入: columnTitle "A" 输出: 1示例 2: 输入: colu…

H.264编解码 - I/P/B帧详解

一、概述 在H.264编解码中,I/P/B帧是一种常见的帧类型。以下是它们的解释: I帧(关键帧):也称为关键帧,它是视频序列中的第一个帧或每个关键时刻的第一个帧。I帧是完整的、自包含的图像帧,不依赖于其他帧进行解码。它存储了关键时刻的完整图像信息。 P帧(预测帧):P帧…

SpringBoot项目请求不中断动态更新代码

在开发中&#xff0c;有时候不停机动态更新代码热部署是一项至关重要的功能&#xff0c;它可以在请求不中断的情况下下更新代码。这种方式不仅提高了开发效率&#xff0c;还能加速测试和调试过程。本文将详细介绍如何在 Spring Boot 项目在Linux系统中实现热部署&#xff0c;特…

【DRF】DRF基本使用

系列文章目录 第一章 DRF基本使用 文章目录 系列文章目录一、DRF介绍&#xff1a;二、安装&#xff1a;三、基本使用&#xff1a;三、添加测试数据&#xff1a;四、编写Serializers&#xff1a;五、编写视图&#xff1a;六、编写路由&#xff1a; 一、DRF介绍&#xff1a; DR…