白骑士的C#教学高级篇 3.2 文件与数据流

21 篇文章 1 订阅

系列目录

上一篇:白骑士的C#教学高级篇 3.1 高级语言特性

        在现代编程中,处理文件和数据流是必不可少的一部分。C# 提供了一套丰富的 API 来处理文件与目录操作、数据流与二进制文件处理以及序列化与反序列化。在本节中,我们将深入探讨这些内容,帮助您掌握如何在 C# 中高效地操作文件和数据流。

文件与目录操作

        C# 提供了 ‘System.IO‘ 命名空间下的 ‘File‘、‘Directory‘ 和 ‘Path‘ 类,用于处理文件和目录的常见操作。

创建、读取和写入文件

using System;
using System.IO;


public class Program
{
    public static void Main(string[] args)
    {
        string path = "example.txt";

        // 写入文件
        File.WriteAllText(path, "Hello, World!");

        // 读取文件
        string content = File.ReadAllText(path);
        Console.WriteLine("File content: " + content);
    }
}

        在这个示例中,使用 ‘File.WriteAllText‘ 方法创建并写入一个文本文件,然后使用 ‘File.ReadAllText‘ 方法读取文件内容。

文件信息操作

FileInfo fileInfo = new FileInfo(path);

Console.WriteLine($"File name: {fileInfo.Name}");
Console.WriteLine($"File size: {fileInfo.Length} bytes");
Console.WriteLine($"File creation time: {fileInfo.CreationTime}");

        在这个示例中,使用 ‘FileInfo‘ 类获取文件的详细信息。

创建、删除和遍历目录

string directoryPath = "exampleDir";


// 创建目录
Directory.CreateDirectory(directoryPath);

// 检查目录是否存在
if (Directory.Exists(directoryPath))
{
    Console.WriteLine("Directory created successfully.");

    // 删除目录
    Directory.Delete(directoryPath);
    Console.WriteLine("Directory deleted successfully.");
}

        在这个示例中,使用 ‘Directory.CreateDirectory‘ 方法创建目录,并使用 ‘Directory.Delete‘ 方法删除目录。

数据流与二进制文件处理

        数据流(Stream)是处理字节序列的抽象概念。C# 提供了多种数据流类,用于读写文件、网络流和内存流等。

使用 FileStream 读写文件

using System;
using System.IO;


public class Program
{
    public static void Main(string[] args)
    {
        string path = "binaryFile.dat";

        // 写入二进制文件
        using (FileStream fs = new FileStream(path, FileMode.Create))
        {
            using (BinaryWriter writer = new BinaryWriter(fs))
            {
                writer.Write(1.25);
                writer.Write("Hello");
                writer.Write(true);
            }
        }

        // 读取二进制文件
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            using (BinaryReader reader = new BinaryReader(fs))
            {
                double number = reader.ReadDouble();
                string text = reader.ReadString();
                bool flag = reader.ReadBoolean();

                Console.WriteLine($"Read values: {number}, {text}, {flag}");
            }
        }
    }
}

        在这个示例中,使用 ‘FileStream‘ 和 ‘BinaryWriter‘ 写入二进制文件,然后使用 ‘FileStream‘ 和 ‘BinaryReader‘ 读取二进制文件。

序列化与反序列化

        序列化是将对象转换为字节流的过程,以便存储或传输。反序列化是将字节流转换回对象的过程。C# 提供了多种序列化方法,包括二进制序列化、XML序列化和JSON序列化。

二进制序列化

using System;
using System.IO;
using System.Runtime.Serialization.Formatters.Binary;


[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}


public class Program
{
    public static void Main(string[] args)
    {
        Person person = new Person { Name = "Alice", Age = 25 };
        string path = "person.dat";

        // 序列化对象
        using (FileStream fs = new FileStream(path, FileMode.Create))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            formatter.Serialize(fs, person);
        }

        // 反序列化对象
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            BinaryFormatter formatter = new BinaryFormatter();
            Person deserializedPerson = (Person)formatter.Deserialize(fs);
            Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        }
    }
}

        在这个示例中,使用 ‘BinaryFormatter‘ 将 ‘Person‘ 对象序列化到文件中,然后将其反序列化回对象。

XML序列化

using System;
using System.IO;
using System.Xml.Serialization;


[Serializable]
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}


public class Program
{
    public static void Main(string[] args)
    {
        Person person = new Person { Name = "Alice", Age = 25 };
        string path = "person.xml";

        // XML序列化对象
        using (FileStream fs = new FileStream(path, FileMode.Create))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Person));
            serializer.Serialize(fs, person);
        }

        // XML反序列化对象
        using (FileStream fs = new FileStream(path, FileMode.Open))
        {
            XmlSerializer serializer = new XmlSerializer(typeof(Person));
            Person deserializedPerson = (Person)serializer.Deserialize(fs);
            Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
        }
    }
}

        在这个示例中,使用 ‘XmlSerializer‘ 将 ‘Person‘ 对象序列化到 XML 文件中,然后将其反序列化回对象。

JSON序列化

using System;
using System.IO;
using System.Text.Json;


public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}


public class Program
{
    public static void Main(string[] args)
    {
        Person person = new Person { Name = "Alice", Age = 25 };
        string path = "person.json";

        // JSON序列化对象
        string jsonString = JsonSerializer.Serialize(person);
        File.WriteAllText(path, jsonString);

        // JSON反序列化对象
        jsonString = File.ReadAllText(path);
        Person deserializedPerson = JsonSerializer.Deserialize<Person>(jsonString);
        Console.WriteLine($"Name: {deserializedPerson.Name}, Age: {deserializedPerson.Age}");
    }
}

        在这个示例中,使用 ‘JsonSerializer‘ 将 ‘Person‘ 对象序列化到 JSON 文件中,然后将其反序列化回对象。

总结

        在本节中,我们探讨了 C# 中处理文件与数据流的多种方法,包括文件与目录操作、数据流与二进制文件处理,以及序列化与反序列化。通过掌握这些技术,您可以在应用程序中高效地管理和操作数据,从而提升应用程序的功能和性能。继续学习 C# 的高级特性,将使您成为更为高效和熟练的开发者。

下一篇:白骑士的C#教学高级篇 3.3 网络编程​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白骑士所长

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值