首先要明确FileStream类操作的是字节和字节数组
常用构造函数介绍
最简单的构造函数只有两个参数,即文件名和FileMode枚举值
FileStream(fliename , FileMode.<Member>)
另一个常用构造函数则有三个参数,第三个参数是FileAccess枚举的一个成员,它指定了流的作用
FileStream(fliename , FileMode.<Member> ,FileAccess.<Member>)
FileMode枚举成员:
成员 | 文件存在 | 文件不存在 |
Append | 打开文件,流指向文件的末尾处,只能与枚举FileAccess.Write结合使用 | 创建一个新文件。只能与枚举FileAccess.Write结合使用 |
Create | 删除该文件,然后创建新文件 | 创建新文件 |
CreateNew | 抛出异常 | 创建新文件 |
Open | 打开文件,流指向文件开头处 | 抛出异常 |
OpenOrCreate | 打开文件,流指向文件开头处 | 创建新文件 |
Truncate | 打开文件,清除其内容。流指向文件开头处,保留文件的初始创建日期 | 抛出异常 |
FileAccess枚举成员:
成员 | 说明 |
Read | 打开文件,用于只读 |
Write | 打开文件,用于只写 |
ReadWrite | 打开文件,用于读写 |
1.文件位置
FileStream类维护内部文件指针,该指针指向文件中进行下一次读写操作的位置。大多数情况下,当打开文件时,它就指向文件的开始位置,但是可以修改此指针,实现此功能的方法是Seek()方法。
Seek()方法有两个参数:第一个参数指定文件指针移动距离(以字节为单位)。第二个参数指定开始计算的起始位置,用SeekOrigin枚举的一个值表示。SeekOrigin枚举包含3个值:Begin、Current和End。
例如:
FileStream file = File.OpenRead("config.txt");
file.Seek(6,SeekOrigin.Begin);//将文件指针移动到文件的第六个字节处,其起始位置就是文件的第一个字节
file.Seek(6,SeekOrigin.Current);//将指针从当前位置移动6个字节
file.Seek(-6,SeekOrigin.End);//将指针移动到文件的倒数第6个字节
2.读取数据
使用Read()方法:从文件中读取数据,再把数据写入一个字节数组。
Read()有三个参数:第一个参数是传入的字节数组,用来存放FileStream对象中的数据,第二个参数是字节数组中开始写入数据的位置,通常是0,第三个参数指定从文件中读取多少字节
FileStream file = new FileStream("home.txt",FileMode.Open);
byte[] byteData = new byte[1024];
file.Seek(10,SeekOrigin.Begin);
file.Read(byteData,0,1024);//从home.txt文件的第10个字节开始读取1024个字节写入byteData字节数组
3.写入数据
使用Write()方法:从字节数组中读取数据,再把数据写入文件中。
和Read()方法一样,Write()方法也是三个参数
上例中已经从home.txt文本中读取了1024个字节到byteData字节数组中,我们再将这个数组的数据写到新的文件中
FileStream newFile = new FileStream("Temp.txt",FileModel.Create);
newFile.Seek(0,SeekOrigin.Begin);
newFile.Write(byteData,0,byteData.Length);//将byteData字节数组里的数据写入到Temp.txt文件中,从第0个字节位置开始