C#文件操作(二)

一、文件读写基本概念

在之前介绍的C#文件操作(一)介绍过有关文件或文件夹等相关操作。今天我们讲解一下文件读写中涉及的一些概念。

1、背景
应用程序运行过程中,把文件从磁盘加载到内存中的过程叫做文件的读操作或输入操作;而把文件从内存中存储到磁盘中的操作称之为写操作或输出操作。

在System.IO命名空间中存在的文件流大多有以下几种。Stream类、FileStream类、StreamWriter类、StreamReader类、BinaryReader类、BinaryWriter类。

其中Stream类是所有文件流类的基类。
其中FileStream类提供了在文件汇总的读写***字节***的方法。
其中StreamReader和StreamWriter类用来对文件进行***文本模式***的读写
其中BinaryReader和BinaryWriter类用来对文件进行***二进制文件***的读写。

二、FileStream类

1、FileStream类主要提供的读取字节的方法,所以它可以轻松的学些AscII码,也就是文本文件。它支持字节和字节数组的处理。FileStream类的构造函数有很多,其中常用的几种构造函数如下:
public FileStream(string path,FileMode mode); //路径,访问模式
public FileStream(string path,FIleMode mode,FileAccess acess); //路径,访问模式,访问权限

其中FileMode是枚举类型,主要有以下几个选项
Append //如果文件存在,就打开,并从文件末尾开始从操作
Create //创建新文件,如果存在这样的文件,就覆盖它
CreateNew //创建新文件,如果存在就报错
Open //如果存在,就打开,否则报错
OpenCreate //如果存在就打开,否则就创建后打开
Truncate //打开现有文件,清楚内容,然后可以项文件中写入全新的数据,但是保留文件的初始化创建日期,如果不
//存在

其中FIleAcess是访问的权限,主要有以下几个选项
Read、Write、ReadWrite

2、FileStream类的创建成员及其说明
CanWrite //可写
CanRead //可读
Length //流长度
Position //流的当前位置
FIleStream //构造函数
Close //关闭流
Flush //清除该流所有缓冲区,使所有缓冲区的数据被写入磁盘中
Read //从流中读取字节块并将该数据写入给定的缓冲区中
ReadByte //从文件中读取一个字节,并将读取位置提升一个字节
Seek //设置当前流的读写位置,需要指定偏移字节和起始位置。起始位置在枚举System.IO.SeekOrigin中定义。有
//三个可选值,Begin、Current、End
Write //使用从缓冲区读取的数据将字节块写入该流
WriteByte //将一个字节写入文件流的当前位置

3、FileStream使用场合
由于FileStream类是专门正对字节进行操作的,所以它处理起来比较繁琐,不能直接处理字符串。但是正因为它的面向字节的特性,使得FileStream类可以处理任何数据文件,而不仅仅是文本文件,通过读取字节数据就可以读取类似图像、声音的文件。所以它比较灵活。通常来说处理文本文件一般不会使用FileStream, 而选择使用StreamReader或StreamWriter类。

4、FileStream类的使用范例

OpenFileDialog myFileDialog = new OpenFileDialog();                //创建一个文件对话框
myFileDialog.Filter = "文本文件(*.txt)|*.txt|音乐文件(*.mp3)|*.mp3";   //设置文件过滤,可选择的有文本文件,音乐文件
myFileDialog.ShowDialog();                                         //显示对话框
string path = myFileDialog.FileName;                               //获取选择的文件
FileStream fs = new FileStream(path,FileMode.Open);                //创建文件流
byte[] byt = new byte[1024];                                       //设置好字节数组用于获取文件汇总的字节信息
while (fs.Read(byt, 0, byt.Length) > 0)                            //每1024个字节的读取出来
{ 
    Console.WriteLine(Encoding.Default.GetString(byt));            //再讲字节数组进行编码转换成字符串
}

由上面的例子我们可以看出,FileStream类处理文本文件比较繁琐,他只能读取字节,想要转换成字符串还要进行编码才可以。

你可能感兴趣的:(C#宝典)