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 枚举),如 OpenCreateAppend
  • access:文件访问权限(FileAccess 枚举),如 ReadWriteReadWrite
  • share:文件共享权限(FileShare 枚举),如 NoneReadReadWrite

示例

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# 提供了 FileDirectory 类,用于执行文件和目录的常见操作。

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 语句:确保文件流在使用后被正确关闭和释放,避免资源泄漏。
  • 选择合适的文件操作类:对于文本文件,使用 StreamReaderStreamWriter;对于二进制文件,使用 BinaryReaderBinaryWriter
  • 注意文件路径:确保文件路径正确,考虑使用绝对路径或相对路径,并处理可能的路径相关异常。
  • 权限管理:注意文件访问权限,特别是在多用户环境中,确保有足够的读写权限。
  • 异常处理:在文件操作中加入异常处理,捕获如 FileNotFoundExceptionIOException 等异常。

七、完整示例

以下是一个完整的示例,展示了文件写入和读取的操作:

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 命名空间提供了丰富的类来支持各种文件操作。开发者可以通过学习这些类和方法来实现对文件的读写操作。建议结合实际代码示例进行练习,以加深理解。

参考资源

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注