首页 > 编程笔记 > C#笔记 阅读:5

C# FileStream类的用法(新手必看)

C# 中,文件 I/O 流使用 FileStream 类实现。

一个 FileStream 类的实例实际上代表一个磁盘文件,它通过 Seek() 方法对文件进行随机访问,同时也包含了流的标准输入、标准输出和标准错误等。FileStr eam 默认对文件的打开方式是同步的,但它也能很好地支持异步操作。

C# FileStream类的常用属性

FileStream 类的常用属性及说明如下表所示:

表:FileStream 类的常用属性及说明
属性 说明
CanRead 获取一个值,该值指示当前流是否支持读取
CanSeek 获取一个值,该值指示当前流是否支持查找
CanTimeout 获取一个值,该值确定当前流是否可以超时
CanWrite 获取一个值,该值指示当前流是否支持写入
IsAsync 获取一个值,该值指示 FileStream 是异步还是同步打开的
Length 获取用字节表示的流长度
Name 获取传递给构造函数的 FileStream 的名称
Position 获取或设置此流的当前位置
ReadTimeout 获取或设置一个值,该值确定流在超时前尝试读取多长时间
WriteTimeout 获取或设置一个值,该值确定流在超时前尝试写入多长时间

C# FileStream类的常用方法

FileStream 类的常用方法及说明如下表所示:

表:FileStream类的常用方法及说明
方法 说明
Close 关闭当前流并释放与之关联的所有资源
EndRead 等待挂起的异步读取完成
EndWrite 结束异步写入,在 I/O 操作完成之前一直阻止
Lock 允许读取访问的同时防止其他进程更改 FileStream
Read 从流中读取字节块并将该数据写入指定缓冲区中
ReadByte 从文件中读取一字节,并将读取位置提升一字节
Seek 将该流的当前位置设置为指定值
SetLength 将该流的长度设置为指定值
Unlock 允许其他进程访问以前锁定的某个文件的全部或部分
Write 使用从缓冲区读取的数据将字节块写入该流
WriteByte 将一个字节写入文件流的当前位置

C# FileStream类操作文件

若用 FileStream 类操作文件,需先实例化一个 FileStream 对象。FileStream 类的构造函数有许多不同的重载形式,其中包括一个最重要的参数,即 FileMode 枚举。

FileMode 枚举规定了如何打开或创建文件,其包括的枚举成员及说明如下表所示:

表:FileMode类的枚举成员及说明
枚举成员 说明
Append 打开现有文件并查找到文件尾,或创建新文件。FileMode.Append 只能同 FileAccess.Write 一起使用。任何读尝试都将失败并引发 ArgumentException 异常。
Create 指定操作系统应创建新文件。如果文件已存在,它将被改写。这要求 FileIOPermissionAccess.Write。System.IO.FileMode.Create 等效于这样的请求:如果文件不存在,则使用 CreateNew,否则使用 Truncate。
CreateNew 指定操作系统应创建新文件。此操作需要 FileIOPermissionAccess.Write。如果文件已存在,则将引发 IOException 异常。
Open 指定操作系统应打开现有文件。打开文件的能力取决于 FileAccess 所指定的值。如果该文件不存在,则引发 System.IO.FileNotFoundException 异常。
OpenOrCreate 指定操作系统应打开文件(如果文件存在),否则,应创建新文件。如果用 FileAccess.Read 打开文件,则需要 FileIOPermissionAccess.Read;如果文件访问为 FileAccess.Write 或 FileAccess.ReadWrite,则需要 FileIOPermissionAccess.Write;如果文件访问为 FileAccess.Append,则需要 FileIOPermissionAccess.Append。
Truncate 指定操作系统应打开现有文件。文件一旦被打开,将被截断为零字节大小。此操作需要 FileIOPermissionAccess.Write。试图从使用 Truncate 打开的文件中进行读取将导致异常。

例如,使用 FileStream 类对象打开 Test.txt 文本文件并对其进行读写访问,代码如下:
FileStream aFile = new FileStream("Test.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite);

相关文章