介绍
读写文件的字节流,是底层流
命名空间:System.IO
官网:https://learn.microsoft.com/zh-cn/dotnet/api/system.io.filestream?view=net-6.0
构造方法
FileStream(String, FileMode, FileAccess)
使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare)
使用指定的路径、创建模式、读/写权限和共享权限初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare, Int32)
使用指定的路径、创建模式、读/写和共享权限以及缓冲区大小初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare, Int32, Boolean)
使用指定的路径、创建模式、读/写和共享权限、缓冲区大小以及同步或异步状态初始化 FileStream 类的新实例。
FileStream(String, FileMode, FileAccess, FileShare, Int32, FileOptions)
使用指定的路径、创建模式、读/写和共享权限初始化 FileStream 类的新实例,访问其他 FileStreams 可以具有相同的文件、缓冲区大小和其他文件选项。
FileStream(String, FileStreamOptions)
使用指定的路径、创建模式、读/写和共享权限、缓冲区大小、其他文件选项、预分配大小以及其他 FileStreams 可以访问同一文件初始化 FileStream 类的新实例。
FileMode 枚举
指定操作系统打开文件的方式。
命名空间:System.IO
官网:https://learn.microsoft.com/zh-cn/dotnet/api/system.io.fileaccess?view=net-6.0
| 名称 | 值 | 说明 |
|---|---|---|
| Append | 6 | 若存在文件,则打开该文件并查找到文件尾,或者创建一个新文件。 这需要 Append 权限。 FileMode.Append 只能与 FileAccess.Write 一起使用。 试图查找文件尾之前的位置时会引发 IOException 异常,并且任何试图读取的操作都会失败并引发 NotSupportedException 异常。 |
| Create | 2 | 指定操作系统应创建新文件。 如果此文件已存在,则会将其覆盖。 这需要 Write 权限。 FileMode.Create 等效于这样的请求:如果文件不存在,则使用 CreateNew;否则使用 Truncate。 如果该文件已存在但为隐藏文件,则将引发 UnauthorizedAccessException异常。 |
| CreateNew | 1 | 指定操作系统应创建新文件。 这需要 Write 权限。 如果文件已存在,则将引发 IOException异常。 |
| Open | 3 | 指定操作系统应打开现有文件。 打开文件的能力取决于 FileAccess 枚举所指定的值。 如果文件不存在,引发一个 FileNotFoundException 异常。 |
| OpenOrCreate | 4 | 指定操作系统应打开文件(如果文件存在);否则,应创建新文件。 如果用 FileAccess.Read 打开文件,则需要 Read权限。 如果文件访问为 FileAccess.Write,则需要 Write权限。 如果用 FileAccess.ReadWrite 打开文件,则同时需要 Read 和 Write权限。 |
| Truncate | 5 | 指定操作系统应打开现有文件。 该文件被打开时,将被截断为零字节大小。 这需要 Write 权限。 尝试从使用 FileMode.Truncate 打开的文件中进行读取将导致 ArgumentException 异常。 |
FileAccess 枚举
定义文件的读取、写入或读/写访问权限的常量
命名空间:System.IO
官网:https://learn.microsoft.com/zh-cn/dotnet/api/system.io.fileaccess?view=net-6.0
| 名称 | 值 | 说明 |
|---|---|---|
| Read | 1 | 对文件的读访问。 可从文件中读取数据。 |
| ReadWrite | 3 | 对文件的读写访问权限。 可从文件读取数据和将数据写入文件。 |
| Write | 2 | 文件的写访问。 可将数据写入文件。 |
属性
| 属性 | 解释 |
|---|---|
| CanRead | 获取一个值,该值指示当前流是否支持读取。 |
| CanSeek | 获取一个值,该值指示当前流是否支持查找。 |
| CanWrite | 获取一个值,该值指示当前流是否支持写入。 |
| Length | 获取流的长度(以字节为单位)。 |
| Name | 获取在 FileStream中打开的文件的绝对路径。 |
| Position | 获取或设置此流的当前位置。 |
方法
| 方法 | 解释 |
|---|---|
| Close() | 关闭当前流并释放与当前流关联的任何资源(如套接字和文件句柄)。 请确保流已正确释放,而不是调用此方法。(继承自 Stream) |
| Dispose() | 释放 Stream使用的所有资源。(继承自 Stream) |
| Dispose(Boolean) | 释放 FileStream 使用的非托管资源,并选择性地释放托管资源。 |
| Flush() | 清除此流的缓冲区,并导致任何缓冲数据写入文件。 |
| Flush(Boolean) | 清除此流的缓冲区,并导致任何缓冲数据写入文件,并清除所有中间文件缓冲区。 |
| Read(Byte[], Int32, Int32) | 从流中读取字节块并写入给定缓冲区中的数据。 |
| ReadByte() | 从文件中读取字节,并提升一个字节的读取位置。 |
| Seek(Int64, SeekOrigin) | 将此流的当前位置设置为给定值。 |
| Write(Byte[], Int32, Int32) | 将字节块写入文件流。 |
| WriteByte(Byte) | 将字节写入文件流中的当前位置。 |
例子-写入
FileStream F = new FileStream("test.dat",
FileMode.OpenOrCreate, FileAccess.ReadWrite);
for (int i = 1; i <= 20; i++)
{
F.WriteByte((byte)i);
}
F.Close();
Console.ReadKey();
例子-读取
FileStream F = new FileStream("test.dat",
FileMode.OpenOrCreate, FileAccess.ReadWrite);
for (int i = 0; i <= 20; i++)
{
Console.Write(F.ReadByte() + " ");
}
F.Close();
Console.ReadKey();