当前位置: 首页 > news >正文

C# 中常用 IO 类的核心属性表格及使用示例

一、核心属性表格

类名主要属性(非静态)属性描述
BinaryReaderBaseStream获取当前阅读器的基础流(如 FileStream)
BinaryWriterBaseStream获取当前写入器的基础流(如 FileStream)
BufferedStreamLengthPositionCanReadCanWriteBufferSize流长度、当前位置、是否可读写、缓冲区大小
DirectoryInfoNameFullNameParentExistsCreationTimeLastWriteTime目录名、完整路径、父目录、是否存在、创建时间、最后写入时间
DriveInfoNameDriveTypeTotalSizeAvailableFreeSpaceDriveFormatIsReady驱动器名(如 "C:")、驱动器类型、总容量、可用空间、文件系统、是否就绪
FileInfoNameFullNameLengthExistsCreationTimeLastWriteTimeIsReadOnly文件名、完整路径、文件大小(字节)、是否存在、创建时间、最后写入时间、是否只读
FileStreamLengthPositionCanReadCanWriteNameIsAsync流长度、当前位置、是否可读写、关联文件名、是否异步操作
MemoryStreamLengthPositionCapacityToArray()(方法,常作为属性使用)流长度、当前位置、容量(可分配的内存大小)、转换为字节数组
StreamReaderBaseStreamCurrentEncodingEndOfStream基础流、当前编码(如 UTF8)、是否到达流末尾
StreamWriterBaseStreamEncodingAutoFlush基础流、写入编码、是否自动刷新缓冲区

二、使用示例

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 类的核心用法,实际开发中可根据场景选择静态类(如FileDirectory)或实例类(如FileInfoDirectoryInfo):静态类适合单次操作,实例类适合多次操作同一对象(性能更优)。

http://www.dtcms.com/a/333978.html

相关文章:

  • 流处理、实时分析与RAG驱动的Python ETL框架:构建智能数据管道(下)
  • FastDeploy2.0:Prometheus3.5.0通过直接采集,进行性能指标分析
  • KNN 算法详解:从电影分类到鸢尾花识别的实战指南
  • EP1C12F324I7N Altera Cyclone FPGA
  • 肖臻《区块链技术与应用》第23-26讲 - The DAO事件、BEC事件、反思和总结
  • 陪诊小程序系统开发:让就医不再是一件难事
  • UniApp 页面传参方式详解
  • 告别在线转换风险:本地运行的PDF转Word技术评测
  • Redis-plus-plus 安装指南
  • AI杀死的第一个仪式:“hello world”
  • 分享一个Oracle表空间自动扩容与清理脚本
  • 告别重复纹理:用Substance Designer构建UE5程序化地貌材质系统
  • 设计模式之静态代理
  • 基于Python3.10.6与jieba库的中文分词模型接口在Windows Server 2022上的实现与部署教程
  • 跑实验记录
  • HTTP 通信中的认证方式
  • macOS 中查看当前生效 shell 及配置文件的方法
  • Boost搜索引擎项目(详细思路版)
  • 数字化与人工智能的崛起及其社会影响研究报告
  • Navicat 为 SQLite 数据库设置密码指南
  • 学习游戏制作记录(制作系统与物品掉落系统)8.16
  • AT89C52单片机介绍
  • 《设计模式》代理模式
  • Day56 Java面向对象10 方法重写
  • 《Python学习之字典(一):基础操作与核心用法》
  • duiLib 实现鼠标拖动状态栏时,窗口跟着拖动
  • 拒绝造轮子(C#篇)使用SqlSugar实现数据库的访问
  • Windows MCP.Net:基于.NET的Windows桌面自动化MCP服务器深度解析
  • 玩转tokenizer
  • huggingface TRL中的对齐算法: KTO