FileStream读写文件 VS StreamWriter和StreamReader读写文件

时间:2021-08-31 05:32:12

FileStream对象表示在磁盘或网络路径上指向文件的流。这个类提供了在文件中读写字节的方法,但经常使用StreamReader或StreamWriter执行这些功能。这是因为FileStream类操作的是字节和字节数组,而Stream类操作的是字符数据。字符数据易于使用,但是有些操作,比如随机文件访问(访问文件中间某点的数据),就必须由FileStream对象执行.
其中创建FileStream对象最简单的构造函数如下:

 

FileStream读写文件 VS StreamWriter和StreamReader读写文件FileStream读写文件 VS StreamWriter和StreamReader读写文件
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也类似。

实例:

FileStream读写文件 VS StreamWriter和StreamReader读写文件FileStream读写文件 VS StreamWriter和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();

        }