信息
您所需的主题如下所示。但此主题未包含在此库中。

FileStream 类

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

命名空间:  System.IO
程序集:  mscorlib(在 mscorlib.dll 中)

[ComVisibleAttribute(true)]
public class FileStream : Stream

FileStream 类型公开以下成员。

  名称说明
公共方法FileStream(IntPtr, FileAccess) 已过时。使用指定的读/写权限为指定的文件句柄初始化 FileStream 类的新实例。
公共方法FileStream(SafeFileHandle, FileAccess)使用指定的读/写权限为指定的文件句柄初始化 FileStream 类的新实例。
公共方法由 XNA Framework 提供支持FileStream(String, FileMode)使用指定的路径和创建模式初始化 FileStream 类的新实例。
公共方法FileStream(IntPtr, FileAccess, Boolean) 已过时。使用指定的读/写权限和 FileStream 实例所属权为指定的文件句柄初始化 FileStream 类的新实例。
公共方法FileStream(SafeFileHandle, FileAccess, Int32)使用指定的读/写权限和缓冲区大小为指定的文件句柄初始化 FileStream 类的新实例。
公共方法由 XNA Framework 提供支持FileStream(String, FileMode, FileAccess)使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。
公共方法FileStream(IntPtr, FileAccess, Boolean, Int32) 已过时。使用指定的读/写权限、FileStream 实例所属权和缓冲区大小为指定的文件句柄初始化 FileStream 类的新实例。
公共方法FileStream(SafeFileHandle, FileAccess, Int32, Boolean)使用指定的读/写权限、缓冲区大小和同步或异步状态为指定的文件句柄初始化 FileStream 类的新实例。
公共方法由 XNA Framework 提供支持FileStream(String, FileMode, FileAccess, FileShare)使用指定的路径、创建模式、读/写权限和共享权限创建 FileStream 类的新实例。
公共方法FileStream(IntPtr, FileAccess, Boolean, Int32, Boolean) 已过时。使用指定的读/写权限、FileStream 实例所属权、缓冲区大小和同步或异步状态为指定的文件句柄初始化 FileStream 类的新实例。
公共方法由 XNA Framework 提供支持FileStream(String, FileMode, FileAccess, FileShare, Int32)用指定的路径、创建模式、读/写及共享权限和缓冲区大小初始化 FileStream 类的新实例。
公共方法由 XNA Framework 提供支持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 类的新实例。
页首

  名称说明
公共属性由 XNA Framework 提供支持CanRead获取一个值,该值指示当前流是否支持读取。 (重写 Stream.CanRead。)
公共属性由 XNA Framework 提供支持CanSeek获取一个值,该值指示当前流是否支持查找。 (重写 Stream.CanSeek。)
公共属性由 XNA Framework 提供支持CanTimeout获取一个值,该值确定当前流是否可以超时。 (继承自 Stream。)
公共属性由 XNA Framework 提供支持CanWrite获取一个值,该值指示当前流是否支持写入。 (重写 Stream.CanWrite。)
公共属性Handle 已过时。获取当前 FileStream 对象所封装文件的操作系统文件句柄。
公共属性由 XNA Framework 提供支持IsAsync获取一个值,该值指示 FileStream 是异步还是同步打开的。
公共属性由 XNA Framework 提供支持Length获取用字节表示的流长度。 (重写 Stream.Length。)
公共属性由 XNA Framework 提供支持Name获取传递给构造函数的 FileStream 的名称。
公共属性由 XNA Framework 提供支持Position获取或设置此流的当前位置。 (重写 Stream.Position。)
公共属性由 XNA Framework 提供支持ReadTimeout获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试读取多长时间。 (继承自 Stream。)
公共属性SafeFileHandle获取 SafeFileHandle 对象,该对象表示当前 FileStream 对象封装的文件的操作系统文件句柄。
公共属性由 XNA Framework 提供支持WriteTimeout获取或设置一个值(以毫秒为单位),该值确定流在超时前尝试写入多长时间。 (继承自 Stream。)
页首

  名称说明
公共方法由 XNA Framework 提供支持BeginRead开始异步读。 (重写 Stream.BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)。)

在 XNA Framework3.0BeginRead(Byte[], Int32, Int32, AsyncCallback, Object)
公共方法由 XNA Framework 提供支持BeginWrite开始异步写。 (重写 Stream.BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)。)

在 XNA Framework3.0BeginWrite(Byte[], Int32, Int32, AsyncCallback, Object)
公共方法由 XNA Framework 提供支持Close关闭当前流并释放与之关联的所有资源(如套接字和文件句柄)。 (继承自 Stream。)
公共方法CopyTo(Stream)从当前流中读取字节并将其写入到目标流中。 (继承自 Stream。)
公共方法CopyTo(Stream, Int32)从当前流中读取所有字节并将其写入到目标流中(使用指定的缓冲区大小)。 (继承自 Stream。)
公共方法CreateObjRef创建一个对象,该对象包含生成用于与远程对象进行通信的代理所需的全部相关信息。 (继承自 MarshalByRefObject。)
受保护的方法由 XNA Framework 提供支持CreateWaitHandle 已过时。分配 WaitHandle 对象。 (继承自 Stream。)
公共方法由 XNA Framework 提供支持Dispose()释放由 Stream 占用的所有资源。 (继承自 Stream。)
受保护的方法由 XNA Framework 提供支持Dispose(Boolean)释放由 FileStream 占用的非托管资源,还可以另外再释放托管资源。 (重写 Stream.Dispose(Boolean)。)
公共方法由 XNA Framework 提供支持EndRead等待挂起的异步读取完成。 (重写 Stream.EndRead(IAsyncResult)。)

在 XNA Framework3.0EndRead(IAsyncResult)
公共方法由 XNA Framework 提供支持EndWrite结束异步写入,在 I/O 操作完成之前一直阻塞。 (重写 Stream.EndWrite(IAsyncResult)。)

在 XNA Framework3.0EndWrite(IAsyncResult)
公共方法由 XNA Framework 提供支持Equals(Object)确定指定的 Object 是否等于当前的 Object (继承自 Object。)
受保护的方法由 XNA Framework 提供支持Finalize确保垃圾回收器回收 FileStream 时释放资源并执行其他清理操作。 (重写 Object.Finalize()。)
公共方法由 XNA Framework 提供支持Flush()清除此流的缓冲区,使得所有缓冲的数据都写入到文件中。 (重写 Stream.Flush()。)
公共方法Flush(Boolean)清除此流的缓冲区,将所有缓冲的数据都写入到文件中,另外也清除所有中间文件缓冲区。
公共方法GetAccessControl获取 FileSecurity 对象,该对象封装当前 FileStream 对象所描述的文件的访问控制列表 (ACL) 项。
公共方法由 XNA Framework 提供支持GetHashCode用作特定类型的哈希函数。 (继承自 Object。)
公共方法GetLifetimeService检索控制此实例的生存期策略的当前生存期服务对象。 (继承自 MarshalByRefObject。)
公共方法由 XNA Framework 提供支持GetType获取当前实例的 Type (继承自 Object。)
公共方法InitializeLifetimeService获取控制此实例的生存期策略的生存期服务对象。 (继承自 MarshalByRefObject。)
公共方法Lock防止其他进程读取或写入 FileStream
受保护的方法由 XNA Framework 提供支持MemberwiseClone()创建当前 Object 的浅表副本。 (继承自 Object。)
受保护的方法MemberwiseClone(Boolean)创建当前 MarshalByRefObject 对象的浅表副本。 (继承自 MarshalByRefObject。)
受保护的方法ObjectInvariant基础结构。提供对 Contract 的支持。 (继承自 Stream。)
公共方法由 XNA Framework 提供支持Read从流中读取字节块并将该数据写入给定缓冲区中。 (重写 Stream.Read(Byte[], Int32, Int32)。)
公共方法由 XNA Framework 提供支持ReadByte从文件中读取一个字节,并将读取位置提升一个字节。 (重写 Stream.ReadByte()。)
公共方法由 XNA Framework 提供支持Seek将该流的当前位置设置为给定值。 (重写 Stream.Seek(Int64, SeekOrigin)。)
公共方法SetAccessControlFileSecurity 对象所描述的访问控制列表 (ACL) 项应用于当前 FileStream 对象所描述的文件。
公共方法由 XNA Framework 提供支持SetLength将该流的长度设置为给定值。 (重写 Stream.SetLength(Int64)。)
公共方法由 XNA Framework 提供支持ToString返回表示当前对象的字符串。 (继承自 Object。)
公共方法Unlock允许其他进程访问以前锁定的某个文件的全部或部分。
公共方法由 XNA Framework 提供支持Write使用从缓冲区读取的数据将字节块写入该流。 (重写 Stream.Write(Byte[], Int32, Int32)。)
公共方法由 XNA Framework 提供支持WriteByte将一个字节写入文件流的当前位置。 (重写 Stream.WriteByte(Byte)。)
页首

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

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

注意注意

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

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

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

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

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

流位置更改检测

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

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

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

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

下面的示例演示一些 FileStream 构造函数的用法。


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

class Test
{

    public static void Main()
    {
        string path = @"c:\temp\MyTest.txt";

        // Delete the file if it exists.
        if (File.Exists(path))
        {
            File.Delete(path);
        }

        //Create the file.
        using (FileStream fs = File.Create(path))
        {
            AddText(fs, "This is some text");
            AddText(fs, "This is some more text,");
            AddText(fs, "\r\nand this is on a new line");
            AddText(fs, "\r\n\r\nThe following is a subset of characters:\r\n");

            for (int i=1;i < 120;i++)
            {
                AddText(fs, Convert.ToChar(i).ToString());

            }
        }

        //Open the stream and read it back.
        using (FileStream fs = File.OpenRead(path))
        {
            byte[] b = new byte[1024];
            UTF8Encoding temp = new UTF8Encoding(true);
            while (fs.Read(b,0,b.Length) > 0)
            {
                Console.WriteLine(temp.GetString(b));
            }
        }
    }

    private static void AddText(FileStream fs, string value)
    {
        byte[] info = new UTF8Encoding(true).GetBytes(value);
        fs.Write(info, 0, info.Length);
    }
}


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


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();
    }
}


.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 系统要求

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

社区附加资源

显示:
© 2014 Microsoft