System.IO.FileStream 类

方法描述

公开以文件为主的 Stream,既支持同步读写操作,也支持异步读写操作。

语法定义(C# System.IO.FileStream 类 的用法)

[ComVisibleAttribute(true)]
public class FileStream : Stream

构造函数

构造函数名称 构造函数描述
FileStream(IntPtr, FileAccess) 已过时。使用指定的读/写权限为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(SafeFileHandle, FileAccess) 使用指定的读/写权限为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(String, FileMode) 使用指定的路径和创建模式初始化 FileStream 类的新实例。
FileStream(IntPtr, FileAccess, Boolean) 已过时。使用指定的读/写权限和 FileStream 实例所属权为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(SafeFileHandle, FileAccess, Int32) 使用指定的读/写权限和缓冲区大小为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess) 使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。
FileStream(IntPtr, FileAccess, Boolean, Int32) 已过时。使用指定的读/写权限、FileStream 实例所属权和缓冲区大小为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(SafeFileHandle, FileAccess, Int32, Boolean) 使用指定的读/写权限、缓冲区大小和同步或异步状态为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare) 使用指定的路径、创建模式、读/写权限和共享权限创建 FileStream 类的新实例。
FileStream(IntPtr, FileAccess, Boolean, Int32, Boolean) 已过时。使用指定的读/写权限、FileStream 实例所属权、缓冲区大小和同步或异步状态为指定的文件句柄初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare, Int32) 用指定的路径、创建模式、读/写及共享权限和缓冲区大小初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) 使用指定的路径、创建模式、读/写和共享权限、缓冲区大小和同步或异步状态初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare, Int32, FileOptions) 使用指定的路径、创建模式、读/写和共享权限、其他 FileStreams 可以具有的对此文件的访问权限、缓冲区大小和附加文件选项初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileSystemRights, FileShare, Int32, FileOptions) 使用指定的路径、创建模式、访问权限和共享权限、缓冲区大小和附加文件选项初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileSystemRights, FileShare, Int32, FileOptions, FileSecurity) 使用指定的路径、创建模式、访问权限和共享权限、缓冲区大小、附加文件选项、访问控制和审核安全初始化 FileStream 类的新实例。

成员/方法

方法名称 方法描述
BeginRead 开始异步读。 (重写 Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)。) 在 XNA Framework3.0BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)。
BeginWrite 开始异步写。 (重写 Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)。) 在 XNA Framework3.0BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)。
Close 关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 (继承自 Stream。)
CopyTo(Stream) 从当前流中读取字节并将其写入到目标流中。 (继承自 Stream。)
CopyTo(Stream, Int32) 从当前流中读取所有字节并将其写入到目标流中(使用指定的缓冲区大小)。 (继承自 Stream。)
CreateObjRef 创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
CreateWaitHandle 已过时。分配 WaitHandle 对象。 (继承自 Stream。)
Dispose() 释放由 Stream 占用的所有资源。 (继承自 Stream。)
Dispose(Boolean) 释放由 FileStream 占用的非托管资源,还可以另外再释放托管资源。 (重写 Stream.Dispose(Boolean)。)
EndRead 等待挂起的异步读取完成。 (重写 Stream.EndRead(IAsyncResult)。) 在 XNA Framework3.0EndRead(IAsyncResult)。
EndWrite 结束异步写入,在 I/O 操作完成之前一直阻塞。 (重写 Stream.EndWrite(IAsyncResult)。) 在 XNA Framework3.0EndWrite(IAsyncResult)。
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 确保垃圾回收器回收 FileStream 时释放资源并执行其他清理操作。 (重写 Object.Finalize()。)
Flush() 清除此流的缓冲区,使得所有缓冲的数据都写入到文件中。 (重写 Stream.Flush()。)
Flush(Boolean) 清除此流的缓冲区,将所有缓冲的数据都写入到文件中,另外也清除所有中间文件缓冲区。
GetAccessControl 获取 FileSecurity 对象,该对象封装当前 FileStream 对象所描述的文件的访问控制列表 (ACL) 项。
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetLifetimeService 检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
GetType 获取当前实例的 Type。 (继承自 Object。)
InitializeLifetimeService 获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
Lock 防止其他进程读取或写入 FileStream。
MemberwiseClone() 创建当前 Object 的浅表副本。 (继承自 Object。)
MemberwiseClone(Boolean) 创建当前 MarshalByRefObject 对象的浅表副本。 (继承自 MarshalByRefObject。)
ObjectInvariant 基础结构。提供对 Contract 的支持。 (继承自 Stream。)
Read 从流中读取字节块并将该数据写入给定缓冲区中。 (重写 Stream.Read(Byte[], Int32, Int32)。)
ReadByte 从文件中读取一个字节,并将读取位置提升一个字节。 (重写 Stream.ReadByte()。)
Seek 将该流的当前位置设置为给定值。 (重写 Stream.Seek(Int64, SeekOrigin)。)
SetAccessControl 将 FileSecurity 对象所描述的访问控制列表 (ACL) 项应用于当前 FileStream 对象所描述的文件。
SetLength 将该流的长度设置为给定值。 (重写 Stream.SetLength(Int64)。)
ToString 返回表示当前对象的字符串。 (继承自 Object。)
Unlock 允许其他进程访问以前锁定的某个文件的全部或部分。
Write 使用从缓冲区读取的数据将字节块写入该流。 (重写 Stream.Write(Byte[], Int32, Int32)。)
WriteByte 将一个字节写入文件流的当前位置。 (重写 Stream.WriteByte(Byte)。)

提示和注释

使用 FileStream 类对文件系统上的文件进行读取、写入、打开和关闭操作,并对其他与文件相关的操作系统句柄进行操作,如管道、标准输入和标准输出。 可以指定读写操作是同步还是异步。 FileStream 缓冲输入和输出以获得更好的性能。

FileStream 对象支持使用 Seek 方法对文件进行随机访问。 Seek 允许将读取/写入位置移动到文件中的任意位置。 这是通过字节偏移参考点参数完成的。 字节偏移量是相对于查找参考点而言的,该参考点可以是基础文件的开始、当前位置或结尾,分别由 SeekOrigin 类的三个属性表示。

注意

磁盘文件始终支持随机访问。 在构造时,CanSeek 属性值设置为 true 或 false,具体取决于基础文件类型。 具体地说,就是当基础文件类型是 FILE_TYPE_DISK(如 winbase.h 中所定义)时,CanSeek 属性值为 true。 否则,CanSeek 属性值为 false。

虽然同步方法 Read 和 Write 以及异步方法 BeginRead、BeginWrite、EndRead 和 EndWrite 在同步或异步模式下都可以工作,但模式会影响这些方法的性能。 FileStream 默认为同步打开文件,但提供了 FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean) 构造函数以异步方式打开文件。

如果进程因文件的一部分锁定而终止或者关闭具有未解除锁定的文件,则行为是未定义的。

有关目录和其他文件操作的信息,请参见 File、Directory 和 Path 类。 File 类是实用工具类,所带静态方法主要用于根据文件路径和标准输入、标准输出以及标准错误设备创建 FileStream 对象。 MemoryStream 类通过字节数组创建流,而且功能与 FileStream 类似。

有关通用 I/O 任务的列表,请参见通用 I/O 任务。

流位置更改检测

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

如果在调用 Read 方法时检测到句柄位置发生意外更改,则 .NET Framework 会丢弃缓冲区的内容并从文件重新读取流。 根据文件大小和任何其他可能影响文件流位置的进程,这可能会对性能产生影响。

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

访问 SafeFileHandle 属性以公开句柄或为 FileStream 对象在其构造函数中提供 SafeFileHandle 属性时,FileStream 对象不会独占持有其句柄。

System.IO.FileStream 类例子

下面的示例打开一个文件(如果文件不存在则创建该文件)并将信息追加到文件末尾。

using System;
using System.IO;
using System.Text;

class FSOpenWrite
{
    public static void Main()
    {
        FileStream fs=new FileStream("c:\\Variables.txt", FileMode.Append, FileAccess.Write, FileShare.Write);
        fs.Close();
        StreamWriter sw=new StreamWriter("c:\\Variables.txt", true, Encoding.ASCII);
        string NextLine="This is the appended line.";
        sw.Write(NextLine);
        sw.Close();
    }
}

继承层次结构

System.Object

System.MarshalByRefObject

System.IO.Stream

System.IO.FileStream

System.IO.IsolatedStorage.IsolatedStorageFileStream

命名空间

namespace: System.IO

程序集: mscorlib(在 mscorlib.dll 中)

线程安全

此类型的任何公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

版本信息

.NET Framework 受以下版本支持:4、3.5、3.0、2.0、1.1、1.0 .NET Framework Client Profile 受以下版本支持:4、3.5 SP1

适用平台

Windows 7, Windows Vista SP1 或更高版本, Windows XP SP3, Windows XP SP2 x64 Edition, Windows Server 2008(不支持服务器核心), Windows Server 2008 R2(支持 SP1 或更高版本的服务器核心), Windows Server 2003 SP2 .NET Framework 并不是对每个平台的所有版本都提供支持。有关支持的版本的列表,请参见.NET Framework 系统要求。