System.IO.FileStream 类

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

使用 FileStream 类读取、写入、打开和关闭文件系统上的文件,以及操作其他与文件相关的操作系统句柄,包括管道、标准输入和标准输出。 可以使用 Write> 和方法执行同步操作,或者ReadAsyncCopyToAsyncWriteAsync,以及FlushAsync执行异步操作的方法。FlushReadCopyTo 使用异步方法执行资源密集型文件操作,而不阻止主线程。 在 Windows 8.x 应用商店应用或桌面应用中一个耗时的流操作可能阻塞 UI 线程并让应用看起来好像不工作时,这种性能的考虑就显得尤为重要了。 FileStream 缓冲输入和输出以提高性能。

重要

此类型实现 IDisposable 接口。 在使用完类型后,您应直接或间接释放类型。 若要直接释放类型,请在 try/catch 块中调用其 Dispose 方法。 若要间接释放类型,请使用 using(在 C# 中)或 Using(在 Visual Basic 中)等语言构造。 有关详细信息,请参阅 IDisposable 接口主题中的“使用实现 IDisposable 的对象”一节。

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

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

注意

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

如果进程终止且文件已锁定或关闭具有未完成锁的文件,则行为是未定义的。

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

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

检测流位置更改

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

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

如果在调用Write方法时检测到句柄位置的意外更改,则会取消缓冲区的内容卡并IOException引发异常。

FileStreamSafeFileHandle访问属性以公开句柄时,对象将不对其句柄具有独占保留,或者FileStream该对象在其构造函数中为该属性提供SafeFileHandle