System.IO.FileStream 类
本文提供了此 API 参考文档的补充说明。
使用 FileStream 类读取、写入、打开和关闭文件系统上的文件,以及操作其他与文件相关的操作系统句柄,包括管道、标准输入和标准输出。 可以使用
重要
此类型实现 IDisposable 接口。 在使用完类型后,您应直接或间接释放类型。 若要直接释放类型,请在 try
/catch
块中调用其 Dispose 方法。 若要间接释放类型,请使用 using
(在 C# 中)或 Using
(在 Visual Basic 中)等语言构造。 有关详细信息,请参阅 IDisposable 接口主题中的“使用实现 IDisposable 的对象”一节。
该 IsAsync 属性检测文件句柄是否已异步打开。 使用具有 isAsync
、useAsync
或options
参数的FileStream构造函数创建类的实例时,请指定此值。 当属性是 true
时,流利用重叠的 I/O 以异步方式执行文件操作。 但是,IsAsync该属性不必true
调用ReadAsync或WriteAsyncCopyToAsync方法。 IsAsync当属性是false
和调用异步读取和写入操作时,UI 线程仍然不会被阻止,但实际 I/O 操作是同步执行的。
该方法 Seek 支持对文件的随机访问。 Seek 允许将读/写位置移动到文件中的任何位置。 这是使用字节偏移引用点参数完成的。 字节偏移量相对于查找引用点(可以是基础文件的开头、当前位置或末尾),由枚举的 SeekOrigin 三个成员表示。
注意
磁盘文件始终支持随机访问。 在构造时, CanSeek 属性值设置为 true
或 false
取决于基础文件类型。 如果基础文件类型FILE_TYPE_DISK,如 winbase.h 中定义,则 CanSeek 属性值为 true
. 否则, CanSeek 属性值为 false
.
如果进程终止且文件已锁定或关闭具有未完成锁的文件,则行为是未定义的。
有关目录操作和其他文件操作,请参阅File和DirectoryPath类。 该 File 类是一个实用工具类,其静态方法主要用于基于文件路径创建 FileStream 对象。 该 MemoryStream 类从字节数组创建流,类似于 FileStream 类。
有关常见文件和目录操作的列表,请参阅 常见 I/O 任务。
检测流位置更改
FileStream当对象在其句柄上没有独占保留时,另一个线程可以同时访问文件句柄,并更改与文件句柄关联的操作系统文件指针的位置。 在这种情况下,对象中的 FileStream 缓存位置以及缓冲区中缓存的数据可能会受到损害。 该FileStream对象定期对访问缓存缓冲区的方法执行检查,以确保操作系统的句柄位置与对象使用的FileStream缓存位置相同。
如果在调用Read方法时检测到句柄位置的意外更改,.NET dis卡缓冲区的内容,并再次读取文件中的流。 这可能会影响性能,具体取决于文件大小以及可能影响文件流位置的任何其他进程。
如果在调用Write方法时检测到句柄位置的意外更改,则会取消缓冲区的内容卡并IOException引发异常。
FileStream当SafeFileHandle访问属性以公开句柄时,对象将不对其句柄具有独占保留,或者FileStream该对象在其构造函数中为该属性提供SafeFileHandle。