System.IO.FileStream 类

本文提供了此 API 参考文档的补充说明。

使用 FileStream 类读取、写入、打开和关闭文件系统上的文件,并操作其他与文件相关的操作系统句柄,包括管道、标准输入和标准输出。 可以使用 ReadWriteCopyToFlush 方法来执行同步操作,或者使用 ReadAsyncWriteAsyncCopyToAsyncFlushAsync 方法来执行异步操作。 使用异步的方法以执行资源占用较多的文件操作,而不阻止主线程。 在 Windows 8.x 应用商店应用或桌面应用中,这种性能注意事项尤其重要,其中耗时的流作可能会阻止 UI 线程,并使你的应用看起来好像不起作用一样。 FileStream 缓冲输入和输出以提高性能。

重要

此类型实现 IDisposable 接口。 使用完该类型后,应直接或间接处理它。 若要直接释放类型,请在块中Disposetry/调用其catch方法。 若要间接释放它,请使用语言构造,例如 using (在 C# 中)或 Using (在 Visual Basic 中)。 有关详细信息,请参阅接口主题中的 IDisposable “使用实现 IDisposable 的对象”部分。

IsAsync 属性检测文件句柄是否已异步打开。 使用具有 FileStreamisAsyncuseAsync参数的options构造函数创建类的实例时,请指定此值。 当属性是 true 时,流利用重叠 I/O 异步执行文件作业。 但是,IsAsync 属性不必是 true 即可调用 ReadAsyncWriteAsyncCopyToAsync 方法。 当 IsAsync 属性为 false 时,调用异步读写操作,UI 线程仍然不会被阻止,但实际的 I/O 操作将同步执行。

该方法 Seek 支持对文件的随机访问。 Seek 允许将读/写位置移动到文件中的任何位置。 这是通过字节偏移引用点参数完成的。 字节偏移量是相对于查找引用点而言的,该引用点可以是基础文件的开头、当前位置或末尾,分别由枚举的三个成员表示。

注释

磁盘文件始终支持随机访问。 在构造时, CanSeek 属性值设置为 truefalse 取决于基础文件类型。 如果基础文件类型FILE_TYPE_DISK,如 winbase.h 中定义,则 CanSeek 属性值为 true. 否则, CanSeek 属性值为 false.

如果一个进程终止时部分文件被锁定,或者关闭了一个仍有未释放锁的文件,其行为是未定义的。

有关目录操作和其他文件操作,请参阅FileDirectoryPath类。 该 File 类是一个实用工具类,其静态方法主要用于基于文件路径创建 FileStream 对象。 该 MemoryStream 类从字节数组创建流,类似于 FileStream 类。

有关常见文件和目录作的列表,请参阅 常见 I/O 任务

检测流位置更改

FileStream当一个对象没有在其句柄上进行独占保留时,另一个线程可以并发访问该文件句柄,并更改与该文件句柄关联的操作系统文件指针的位置。 在这种情况下,对象中的 FileStream 缓存位置以及缓冲区中缓存的数据可能会受到损害。 该 FileStream 对象定期检查访问缓存缓冲区的方法,以确保操作系统的句柄位置与 FileStream 对象使用的缓存位置相同。

如果在调用 Read 方法时检测到句柄位置的意外更改,.NET 将丢弃缓冲区的内容,并从文件开始重新读取流。 这可能会影响性能,具体取决于文件大小以及可能影响文件流位置的任何其他进程。

如果在调用Write方法时检测到句柄位置发生意外更改,缓冲区的内容将被丢弃,并会引发IOException异常。

当访问 FileStream 属性来公开句柄,或者在构造函数中为 SafeFileHandle 对象赋予 FileStream 属性时,SafeFileHandle 对象将不会独占其句柄。