C# 中常用 IO 类的核心属性表格及使用示例
一、核心属性表格
类名 | 主要属性(非静态) | 属性描述 |
---|---|---|
BinaryReader | BaseStream | 获取当前阅读器的基础流(如 FileStream) |
BinaryWriter | BaseStream | 获取当前写入器的基础流(如 FileStream) |
BufferedStream | Length 、Position 、CanRead 、CanWrite 、BufferSize | 流长度、当前位置、是否可读写、缓冲区大小 |
DirectoryInfo | Name 、FullName 、Parent 、Exists 、CreationTime 、LastWriteTime | 目录名、完整路径、父目录、是否存在、创建时间、最后写入时间 |
DriveInfo | Name 、DriveType 、TotalSize 、AvailableFreeSpace 、DriveFormat 、IsReady | 驱动器名(如 "C:")、驱动器类型、总容量、可用空间、文件系统、是否就绪 |
FileInfo | Name 、FullName 、Length 、Exists 、CreationTime 、LastWriteTime 、IsReadOnly | 文件名、完整路径、文件大小(字节)、是否存在、创建时间、最后写入时间、是否只读 |
FileStream | Length 、Position 、CanRead 、CanWrite 、Name 、IsAsync | 流长度、当前位置、是否可读写、关联文件名、是否异步操作 |
MemoryStream | Length 、Position 、Capacity 、ToArray() (方法,常作为属性使用) | 流长度、当前位置、容量(可分配的内存大小)、转换为字节数组 |
StreamReader | BaseStream 、CurrentEncoding 、EndOfStream | 基础流、当前编码(如 UTF8)、是否到达流末尾 |
StreamWriter | BaseStream 、Encoding 、AutoFlush | 基础流、写入编码、是否自动刷新缓冲区 |
二、使用示例
1. BinaryReader
& BinaryWriter
(二进制读写)
// 写入二进制数据 using (var fs = new FileStream("data.bin", FileMode.Create)) using (var writer = new BinaryWriter(fs)) {writer.Write(123); // 写入intwriter.Write(3.14f); // 写入floatwriter.Write("hello"); // 写入字符串 } // 读取二进制数据 using (var fs = new FileStream("data.bin", FileMode.Open)) using (var reader = new BinaryReader(fs)) {int num = reader.ReadInt32(); // 123float f = reader.ReadSingle(); // 3.14fstring str = reader.ReadString();// "hello" }
2. BufferedStream
(缓冲流提升性能)
// 包装FileStream,使用缓冲区减少IO次数 using (var fs = new FileStream("largeFile.txt", FileMode.Open)) using (var buffered = new BufferedStream(fs, 8192)) // 8KB缓冲区 using (var reader = new StreamReader(buffered)) {string content = reader.ReadToEnd(); // 读取效率更高 }
3. Directory
(静态类操作目录)
// 创建目录 Directory.CreateDirectory(@"C:\test\subdir"); // 遍历目录下的所有文件 string[] files = Directory.GetFiles(@"C:\test", "*.txt"); // 删除目录(递归删除子目录和文件) Directory.Delete(@"C:\test", recursive: true);
4. DirectoryInfo
(实例类操作目录)
var dir = new DirectoryInfo(@"C:\test"); if (!dir.Exists) dir.Create(); // 若不存在则创建 // 输出目录信息 Console.WriteLine($"目录名:{dir.Name}"); Console.WriteLine($"完整路径:{dir.FullName}"); Console.WriteLine($"创建时间:{dir.CreationTime}"); // 获取子目录 foreach (var subDir in dir.GetDirectories()) {Console.WriteLine($"子目录:{subDir.Name}"); }
5. DriveInfo
(驱动器信息)
// 获取所有可用驱动器 foreach (var drive in DriveInfo.GetDrives()) {if (drive.IsReady) // 确保驱动器就绪{Console.WriteLine($"驱动器:{drive.Name}");Console.WriteLine($"类型:{drive.DriveType}");Console.WriteLine($"总容量:{drive.TotalSize / 1024 / 1024} MB");Console.WriteLine($"可用空间:{drive.AvailableFreeSpace / 1024 / 1024} MB");} }
6. File
(静态类操作文件)
// 写入文本 File.WriteAllText("test.txt", "Hello World"); // 读取文本 string content = File.ReadAllText("test.txt"); // 复制文件 File.Copy("test.txt", "test_copy.txt"); // 删除文件 File.Delete("test_copy.txt");
7. FileInfo
(实例类操作文件)
var file = new FileInfo("test.txt"); if (!file.Exists) {using (var sw = file.CreateText()) // 创建并写入文本{sw.WriteLine("Hello FileInfo");} } // 输出文件信息 Console.WriteLine($"文件名:{file.Name}"); Console.WriteLine($"大小:{file.Length} 字节"); Console.WriteLine($"最后修改时间:{file.LastWriteTime}"); // 复制文件 file.CopyTo("test_info_copy.txt");
8. FileStream
(字节级文件操作)
// 写入字节 byte[] data = new byte[] { 0x48, 0x65, 0x6C, 0x6C, 0x6F }; // "Hello"的ASCII码 using (var fs = new FileStream("bytes.bin", FileMode.Create)) {fs.Write(data, 0, data.Length); // 从索引0开始写入5个字节 } // 读取字节 using (var fs = new FileStream("bytes.bin", FileMode.Open)) {byte[] buffer = new byte[fs.Length];fs.Read(buffer, 0, buffer.Length);Console.WriteLine(Encoding.ASCII.GetString(buffer)); // 输出"Hello" }
9. MemoryStream
(内存流操作)
// 在内存中处理数据 using (var ms = new MemoryStream()) {// 写入数据byte[] data = Encoding.UTF8.GetBytes("Memory data");ms.Write(data, 0, data.Length);// 重置位置到开头ms.Position = 0;// 读取数据byte[] buffer = new byte[ms.Length];ms.Read(buffer, 0, buffer.Length);Console.WriteLine(Encoding.UTF8.GetString(buffer)); // 输出"Memory data" }
10. Path
(路径处理)
// 拼接路径 string fullPath = Path.Combine(@"C:\test", "subdir", "file.txt"); // 结果:"C:\test\subdir\file.txt" // 获取文件名(含扩展名) string fileName = Path.GetFileName(fullPath); // "file.txt" // 获取扩展名 string ext = Path.GetExtension(fullPath); // ".txt" // 获取目录路径 string dir = Path.GetDirectoryName(fullPath); // "C:\test\subdir"
11. StreamReader
& StreamWriter
(文本文件读写)
// 写入文本 using (var sw = new StreamWriter("log.txt", append: true, Encoding.UTF8)) {sw.WriteLine($"[{DateTime.Now}] 操作日志"); // 追加写入 } // 读取文本 using (var sr = new StreamReader("log.txt", Encoding.UTF8)) {string line;while ((line = sr.ReadLine()) != null) // 逐行读取{Console.WriteLine(line);} }
这些示例覆盖了各 IO 类的核心用法,实际开发中可根据场景选择静态类(如File
、Directory
)或实例类(如FileInfo
、DirectoryInfo
):静态类适合单次操作,实例类适合多次操作同一对象(性能更优)。