FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行.
其中创建FileStream对象最简单的构造函数如下:
FileStream file = new FileStream(fileName,FileMode.Member);
FileStream file = new FileStream(fileName, FileMode.Member, FileAccess.Member);
而FileAccess的成员:
成 员
说 明
Read
打开文件,用于只读
Write
打开文件,用于只写
ReadWrite
打开文件,用于读写
对文件进行不是FileAccess枚举成员指定的操作会导致抛出异常。此属性的作用是,基于用户的身份验证级别改变用户对文件的访问权限。
在FileStream构造函数不使用FileAccess枚举参数的版本中,使用默认值FileAccess. ReadWrite。
FileMode枚举成员,使用每个值会发生什么,取决于指定的文件名是否表示已有的文件。
成 员
文 件 存 在
文件不存在
Append
打开文件,流指向文件的末尾,只能与枚举FileAccess.Write联合使用
创建一个新文件。只能与枚举FileAccess.Write联合使用
Create
删除该文件,然后创建新文件
创建新文件
CreateNew
抛出异常
创建新文件
Open
打开现有的文件,流指向文件的开头
抛出异常
OpenOrCreate
打开文件,流指向文件的开头
创建新文件
Truncate
打开现有文件,清除其内容。流指向文件的开头,保留文件的初始创建日期
抛出异常
FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据
StreamWriter允许将字符和字符串写入文件,它处理底层的转换,向FileStream对象写入数据。StreamReader也类似。
实例:
/// <summary>
/// 文本文件的读写操作
/// </summary>
private static void TextFileOperate()
{
//创建文件并写入
if(!File.Exists(path))
{
using(StreamWriter sw = File.CreateText(path))
{
sw.WriteLine("hello world is writing start");
sw.WriteLine("hello world is writing end");
}
}
//读取文件
if(!File.Exists(path))
{
using(StreamReader sd = File.OpenText(path))
{
while(sd.ReadLine() != null)
{
Console.WriteLine(sd.ReadLine());
}
}
}
//删除拷贝文件
File.Copy(path,@"E:\FileOperaterCopy.txt");
File.Delete(path);
}
/// <summary>
/// FileStream 读取文件
/// </summary>
private static void StreamFileOperate()
{
if(File.Exists(path))
{
File.Delete(path);
}
//打开文件() ,或通过File创建立如:fs = File.Create(path, 1024)
FileStream fs = new FileStream(path, FileMode.CreateNew);
//转换为字节 写入数据(可写入中文)
Byte[] info = new UTF8Encoding(true).GetBytes("This is some text in the file.");
fs.Write(info,0,info.Length);
fs.Close();
//打开文件
fs = new FileStream(path, FileMode.Open, FileAccess.Read);
//读取文件
BinaryReader r = new BinaryReader(fs);
for (int i = 0; i < info.Length; i++)
{
Console.WriteLine(r.ReadChar());
}
fs.Close();
}