C# 文件的输入与输出
关键点
- C# 文件输入和输出是通过流(Stream)实现的,主要使用
System.IO
命名空间中的类。 - 研究表明,常用类包括
FileStream
(基本文件操作)、StreamReader
/StreamWriter
(文本文件读写)和BinaryReader
/BinaryWriter
(二进制文件读写)。 - 证据显示,最佳实践是使用
using
语句确保资源释放,并注意文件路径和权限设置。
文件输入输出的基本概念
C# 中的文件输入和输出是指从文件中读取数据(输入)或向文件中写入数据(输出)。这些操作通常通过流模型实现,流是字节序列的抽象,方便处理文件、网络或内存中的数据。输入流用于读取,输出流用于写入。
如何操作文件
- 打开文件:使用
FileStream
类,指定文件路径和模式(如创建或打开)。 - 读取文件:用
StreamReader
读取文本,或BinaryReader
读取二进制数据。 - 写入文件:用
StreamWriter
写入文本,或BinaryWriter
写入二进制数据。 - 关闭文件:使用
using
语句自动关闭流,确保资源释放。
示例:
using System.IO;
using (StreamWriter writer = new StreamWriter("test.txt"))
{
writer.WriteLine("Hello, world!");
}
using (StreamReader reader = new StreamReader("test.txt"))
{
string line = reader.ReadLine();
Console.WriteLine(line); // 输出:Hello, world!
}
参考资源
C# 文件的输入与输出详细讲解
一、背景与定义
C# 中的文件输入和输出(I/O)是指程序与文件系统交互的过程,包括从文件中读取数据(输入)和向文件中写入数据(输出)。这些操作是通过流(Stream)模型实现的,流是字节序列的抽象,表示数据的来源或目的地。C# 提供了 System.IO
命名空间,包含了各种类,用于执行文件操作,如创建、删除、读取、写入文件等。文件操作是编程中常见的任务,C# 的文件 I/O 机制通过流模型,使得文件的读写操作更加灵活和高效。
二、文件流(FileStream)
FileStream
类是用于读写文件的基本类,它继承自 Stream
类。以下是 FileStream
构造函数的常用参数:
path
:文件路径mode
:文件打开模式(FileMode
枚举),如Open
、Create
、Append
等access
:文件访问权限(FileAccess
枚举),如Read
、Write
、ReadWrite
share
:文件共享权限(FileShare
枚举),如None
、Read
、ReadWrite
示例:
using System.IO;
FileStream fs = new FileStream("test.txt", FileMode.Open, FileAccess.Read);
FileMode
枚举的常用值如下表所示:
模式 | 描述 |
---|---|
Create | 创建新文件,如果文件已存在则覆盖 |
CreateNew | 创建新文件,如果文件已存在则抛出异常 |
Open | 打开现有文件,如果文件不存在则抛出异常 |
OpenOrCreate | 打开现有文件,如果不存在则创建 |
Truncate | 打开现有文件并清空内容,如果不存在则抛出异常 |
三、文本文件的读写
1. StreamReader 类
StreamReader
类用于从文本文件中读取字符数据。它提供了如 ReadLine()
、ReadToEnd()
等方法,适合处理文本格式的文件。
常用方法:
方法 | 描述 |
---|---|
Read() | 读取一个字符 |
ReadLine() | 读取一行文本 |
ReadToEnd() | 读取文件剩余所有内容 |
示例:
using System.IO;
using (StreamReader sr = new StreamReader("test.txt"))
{
string line = sr.ReadLine();
Console.WriteLine(line);
}
2. StreamWriter 类
StreamWriter
类用于向文本文件中写入字符数据。它提供了如 WriteLine()
、Write()
等方法。
常用方法:
方法 | 描述 |
---|---|
Write() | 写入文本 |
WriteLine() | 写入一行文本并换行 |
Flush() | 刷新缓冲区,确保数据写入 |
示例:
using System.IO;
using (StreamWriter sw = new StreamWriter("test.txt"))
{
sw.WriteLine("Hello, world!");
}
四、二进制文件的读写
1. BinaryReader 类
BinaryReader
类用于从二进制文件中读取基本数据类型,如整数、浮点数等。
常用方法:
方法 | 描述 |
---|---|
ReadBoolean() | 读取布尔值 |
ReadInt32() | 读取 32 位整数 |
ReadDouble() | 读取双精度浮点数 |
示例:
using System.IO;
using (BinaryReader br = new BinaryReader(File.Open("test.bin", FileMode.Open)))
{
int number = br.ReadInt32();
Console.WriteLine(number);
}
2. BinaryWriter 类
BinaryWriter
类用于向二进制文件中写入基本数据类型。
常用方法:
方法 | 描述 |
---|---|
Write(Boolean) | 写入布尔值 |
Write(Int32) | 写入 32 位整数 |
Write(Double) | 写入双精度浮点数 |
示例:
using System.IO;
using (BinaryWriter bw = new BinaryWriter(File.Open("test.bin", FileMode.Create)))
{
bw.Write(123);
}
五、文件和目录操作
C# 提供了 File
和 Directory
类,用于执行文件和目录的常见操作。
1. File 类
File
类提供了静态方法,用于文件操作。以下是常用方法:
方法 | 描述 |
---|---|
Exists(path) | 检查文件是否存在 |
Create(path) | 创建新文件 |
Delete(path) | 删除文件 |
Copy(source, dest) | 复制文件 |
Move(source, dest) | 移动文件 |
2. Directory 类
Directory
类提供了静态方法,用于目录操作。以下是常用方法:
方法 | 描述 |
---|---|
Exists(path) | 检查目录是否存在 |
CreateDirectory(path) | 创建目录 |
Delete(path) | 删除目录 |
GetFiles(path) | 获取目录中的文件列表 |
GetDirectories(path) | 获取目录中的子目录列表 |
六、最佳实践
- 使用
using
语句:确保文件流在使用后被正确关闭和释放,避免资源泄漏。 - 选择合适的文件操作类:对于文本文件,使用
StreamReader
和StreamWriter
;对于二进制文件,使用BinaryReader
和BinaryWriter
。 - 注意文件路径:确保文件路径正确,考虑使用绝对路径或相对路径,并处理可能的路径相关异常。
- 权限管理:注意文件访问权限,特别是在多用户环境中,确保有足够的读写权限。
- 异常处理:在文件操作中加入异常处理,捕获如
FileNotFoundException
、IOException
等异常。
七、完整示例
以下是一个完整的示例,展示了文件写入和读取的操作:
using System;
using System.IO;
class Program
{
static void Main()
{
try
{
// 写入文件
using (StreamWriter writer = new StreamWriter("test.txt"))
{
writer.WriteLine("Hello, world!");
}
// 读取文件
using (StreamReader reader = new StreamReader("test.txt"))
{
string line = reader.ReadLine();
Console.WriteLine(line); // 输出:Hello, world!
}
}
catch (Exception ex)
{
Console.WriteLine("发生异常:" + ex.Message);
}
}
}
八、总结
C# 的文件输入和输出通过流模型实现,System.IO
命名空间提供了丰富的类来支持各种文件操作。开发者可以通过学习这些类和方法来实现对文件的读写操作。建议结合实际代码示例进行练习,以加深理解。
参考资源