C# FileStream类的用法(新手必看)
在 C# 中,文件 I/O 流使用 FileStream 类实现。
一个 FileStream 类的实例实际上代表一个磁盘文件,它通过 Seek() 方法对文件进行随机访问,同时也包含了流的标准输入、标准输出和标准错误等。FileStr eam 默认对文件的打开方式是同步的,但它也能很好地支持异步操作。
FileMode 枚举规定了如何打开或创建文件,其包括的枚举成员及说明如下表所示:
例如,使用 FileStream 类对象打开 Test.txt 文本文件并对其进行读写访问,代码如下:
一个 FileStream 类的实例实际上代表一个磁盘文件,它通过 Seek() 方法对文件进行随机访问,同时也包含了流的标准输入、标准输出和标准错误等。FileStr eam 默认对文件的打开方式是同步的,但它也能很好地支持异步操作。
C# FileStream类的常用属性
FileStream 类的常用属性及说明如下表所示:属性 | 说明 |
---|---|
CanRead | 获取一个值,该值指示当前流是否支持读取 |
CanSeek | 获取一个值,该值指示当前流是否支持查找 |
CanTimeout | 获取一个值,该值确定当前流是否可以超时 |
CanWrite | 获取一个值,该值指示当前流是否支持写入 |
IsAsync | 获取一个值,该值指示 FileStream 是异步还是同步打开的 |
Length | 获取用字节表示的流长度 |
Name | 获取传递给构造函数的 FileStream 的名称 |
Position | 获取或设置此流的当前位置 |
ReadTimeout | 获取或设置一个值,该值确定流在超时前尝试读取多长时间 |
WriteTimeout | 获取或设置一个值,该值确定流在超时前尝试写入多长时间 |
C# FileStream类的常用方法
FileStream 类的常用方法及说明如下表所示:方法 | 说明 |
---|---|
Close | 关闭当前流并释放与之关联的所有资源 |
EndRead | 等待挂起的异步读取完成 |
EndWrite | 结束异步写入,在 I/O 操作完成之前一直阻止 |
Lock | 允许读取访问的同时防止其他进程更改 FileStream |
Read | 从流中读取字节块并将该数据写入指定缓冲区中 |
ReadByte | 从文件中读取一字节,并将读取位置提升一字节 |
Seek | 将该流的当前位置设置为指定值 |
SetLength | 将该流的长度设置为指定值 |
Unlock | 允许其他进程访问以前锁定的某个文件的全部或部分 |
Write | 使用从缓冲区读取的数据将字节块写入该流 |
WriteByte | 将一个字节写入文件流的当前位置 |
C# FileStream类操作文件
若用 FileStream 类操作文件,需先实例化一个 FileStream 对象。FileStream 类的构造函数有许多不同的重载形式,其中包括一个最重要的参数,即 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);