用途:为 .NET 应用提供文件 I/O 的实现模式与最佳实践,覆盖 FileStream、RandomAccess、FileSystemWatcher、MemoryMappedFile 与路径处理。
主要能力:FileStream 构造需显式启用异步(useAsync: true 或 FileOptions.Asynchronous),否则 ReadAsync/WriteAsync 会在线程池上模拟同步 I/O;.NET 6+ 可用 FileStreamOptions 并设置 PreallocationSize 降低碎片。RandomAccess 提供静态、基于偏移、线程安全的读写,适合并发访问不同偏移、索引文件与数据库页;支持 scatter/gather。File 便捷方法适合小文件(<1 MB 用 ReadAllTextAsync 等),1–100 MB 建议 ReadLinesAsync 或缓冲 FileStream,>100 MB 用 FileStream/RandomAccess。FileSystemWatcher 需处理重复事件去抖,默认内部缓冲 8 KB,可增至 64 KB 并处理 InternalBufferOverflowException;Windows 用 ReadDirectoryChangesW,Linux 用 inotify(受 max_user_watches 限制),macOS 用 FSEvents。MemoryMappedFile 用于大文件随机访问与 IPC 共享内存(CreateNew/OpenExisting)。路径处理方面,Path.Combine 在第二参数为根路径时会丢弃基准路径,存在路径遍历风险,建议用 Path.Join 并做绝对路径前缀校验;临时文件用 Path.GetRandomFileName 配合 FileMode.CreateNew 与 DeleteOnClose。
使用方式:按场景选择 API 并显式管理缓冲区大小(小文件 4 KB,大文件顺序读 64–128 KB,NFS/SMB 64 KB,SSD 随机 4 KB)。跨平台注意大小写(Linux 区分、Windows/macOS 默认不区分)、UnixFileMode 仅在类 Unix 生效、锁语义(Windows 强制、Linux/macOS 建议性)。异常处理覆盖 IOException 层级及 HResult(如磁盘满、共享冲突),并注意磁盘满可能在 Flush/Dispose 时才抛出。
适用场景:本地文件读写、大文件随机访问、进程间共享内存、目录变更监控、跨平台路径安全处理。
限制与范围:不涵盖 PipeReader/PipeWriter 与网络 I/O、async/await 基础、Span/Memory/ArrayPool 深入、JSON/Protobuf 序列化、BackgroundService、Channel、输入校验(IFormFile)等,均由其他技能覆盖;可测试文件系统访问可考虑 System.IO.Abstractions,具体实践暂未提供。