系列目录
在现代编程中,处理文件和数据流是必不可少的一部分。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 网络编程