C# FileStream读写二进制文件

介绍

读写文件的字节流,是底层流

命名空间: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();

原文出处:/show_1GW1PXxOBfEv.html