1.枚举类FileMode
指定操作系统打开文件的方式
- CreateNew 指定操作系统应创建一个新的文件
- Create 指定操作系统应创建一个新的文件。 如果该文件已存在,则会覆盖它
- Open 指定操作系统应打开现有文件
- OpenOrCreate 指定操作系统应打开一个文件,是否它存在,则否则,应创建一个新的文件
- Truncate 指定操作系统应打开现有文件。 当打开文件时,应被截断,以便其大小为零字节
- Append 如果它存在,并且查找到该文件的末尾,或者创建一个新文件,请打开该文件
2.枚举类FileAccess
对于读、 写或读/写访问的文件中定义的常数
- Read 对文件的读取访问权限。 可以从文件读取数据
- Write 对文件的写入访问权限。 数据可以写入该文件
- ReadWrite 读取和写入到文件的访问。 可以写入和从文件中读取数据
3.枚举类FileShare
包含用于控制的访问其他类型的常数 System.IO.FileStream 对象可以具有相同的文件
- None 拒绝共享当前文件。 在关闭文件之前,任何请求打开的文件 (此进程或另一个进程) 将失败
- Read 允许以后打开文件进行读取
- Write 允许以后打开文件进行写入
- ReadWrite 允许以后打开的文件进行读取或写入
- Delete 允许以后删除文件
- Inheritable 使文件句柄由子进程继承。 这是不直接支持 Win32
4.FileStream类
FileStream派生于抽象类Stream,Stream抽象类实现了IDisposable接口
常用构造方法:
- FileStream(String 文件路径,FileMode 文件打开模式)
- FileStream(String 文件路径,FileMode 文件打开模式,FileAccess 文件访问方式)
- FileStream(String 文件路径,FileMode 文件打开模式,FileAccess 文件访问方式,FileShare 文件共享方式)
常用方法:
- Read() 从流中读取数据,返回字节数组
- Write() 将字节块(字节数组)写入该流
- Seek() 设置文件读取或写入的起始位置
- Flush() 清除该流缓冲区,使得所有缓冲的数据都被写入到文件中
- Close() 关闭当前流并释放与之相关联的所有系统资源
属性:
- CanRead 判断当前流是否支持读取,返回bool值,True表示可以读取
- CanWrite 判断当前流是否支持写入,返回bool值,True表示可以写入
- Position 获取或设置此流的当前位置
读取文本文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileStreamTest { class Program { static void Main(string[] args) { using (FileStream fileStream = new FileStream("E:\source.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { byte[] buff = new byte[1024];//设置内存缓存区大小 while (true) { int r = fileStream.Read(buff, 0, buff.Length); if (r == 0) break; else { string str = Encoding.Default.GetString(buff); Console.Write(str); } } } Console.WriteLine("读取结束"); Console.ReadLine(); } } }
写入文本文件
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; namespace FileStreamTest { class Program { static void Main(string[] args) { using (FileStream fileStream = new FileStream("E:\source.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite)) { //将要追加的字符串转换成字节数组 byte[] byteBuffer = Encoding.Default.GetBytes("你最好!Yeah!"); //设置当前流的位置(如果不设置下面的Position属性,执行Write方法的时候是从前往后覆盖) fileStream.Position = fileStream.Length; //写入文件 fileStream.Write(byteBuffer, 0, byteBuffer.Length); } Console.ReadLine(); } } }