C#简单的文件操作
一、文件概述
程序中的数据通常保存在内存中,程序关闭后,数据就会清除。文件就适合保存相对简单的数据或程序的计算结果。
二、文件内容的读写
1、步骤
- 创建文件流
- 创建阅读器或者写入器
- 执行读写操作
- 关闭阅读器或者写入器
- 关闭文件流
2、步骤分解
2.1、文件流
流是一个用于数据传输的对象。
我们使用的文件流是FileStream类,使用前需要导入System.IO命名空间,它主要用于读写文件中的数据,在创建它的对象时,需要在它的构造函数中指定参数。如下:
FileStrean fs = new FileStrean(路径,FileMode);
其中的FileMode是枚举类型,有以下值:
- CreateNew :创建新的文件,如果文件已经存在会异常
- Create :创建新文件,文件如果已经存在了直接打开已经存在的文件
- Open:打开一个已经存在的文件,如果文件不存在会报错
- OpenOrCreate :文件存在则打开已经存在的文件。文件不存在则先创建一个新的文件,再打开
- Truncate:文件存在的话,先把里面的内容删除,然后再往里面写内容。文件不存在会发生异常
- Append:打开一个已经存在的文件,在最后追加内容。。如果文件不存在,则异常
2.2、阅读器/写入器
2.2.1、写入器:StreamWriter
写入器创建对象的语法:
StreamWriter writer = new StreamWriter(文件流对象);
常用方法有:
- StreamWriter.Write() :用于写入流,这个流就是我们创建好的流
- StreamWriter.WriteLine():用于写入一行数据,写入后跟换行符
- StreamWriter.Close():用于关闭写入器
2.2.2、阅读器:StreamReader
阅读器创建对象的语法:
StreamReader reader = new StreamReader(文件流对象);
常用方法有:
- StreamReader.ReadLine():读取文件流中的一行数据,并返回字符串
- StreamReader.ReadToEnd():从当前位置都到末尾,返回字符串
- StreamReader.Close():用于关闭读取器
3、乱码问题
用StreamReader读取文件中的中文文本,因为不同的文件编码格式的不同导致有时会产生乱码问题。
所以C#中使用Encoding类指定字符编码。Encoding类位于System.Text命名空间,用来表示字符编码。语法如下:
StreamReader reader = new StreamReader(文件流对象,Encoding.Default);
Encoding.Default:获取操作系统的当前编码
也可以通过**Encoding类的静态方法GetEncoding(string name)**指定字符编码,参数name必须是C#支持的编码名。
三、文件和目录的操作
都位于System.IO命名空间中
1、文件
File 类
File是静态类,它的主要方法如下表所示:
方法名称 | 说明 |
---|---|
Delete(string path) | 删除文件,若文件不存在,不会异常 |
Exists(string path) | 用于检查指定文件是否存在,返回bool |
Copy(string sourceFilePath,string destFileName) | 将指定路径的源文件中的内容复制到目标文件中,如果目标文件不存在,在指定路径中新建一个文件 |
Move(string sourceFilePath,string destFileName) | 将指定文件移动到一个新的路径(新路径不能已存在相同的文件名) |
Creat(string path) | 新建文件 |
FileInfo 类
FileInfo 是非静态类
使用时必须创建对象才能使用:
FileInfo fi = new FileInfo(string path);
它的主要属性和方法如下表所示:
方法/属性 | 说明 |
---|---|
Delete() //方法 | 删除文件,若文件不存在,不会异常 |
Exists //属性 | 用于检查指定文件是否存在,返回bool |
CopyTo(string destFileName) //方法 | 将现有文件复制到新文件,不允许覆盖现有文件 |
MoveTo(string destFileName) //方法 | 将指定文件移动到一个新的路径(新路径不能已存在相同的文件名) |
Extension //属性 | 获取表示文件扩展名部分的字符串 |
Name //属性 | 获取文件名 |
FullName //属性 | 获取目录或文件的完整目录 |
2、目录
Directory 类
Directory是静态类,它的主要方法如下表所示:
方法名称 | 说明 |
---|---|
Delete(string path) | 删除指定目录 |
Exists(string path) | 用于检查指定目录是否存在,返回bool |
Move(string sourceFilePath,string destFileName) | 用于将文件或目录及其内容移动到一个新位置 |
CreateDirectory(string path) | 新建文件 |
Delete(string path,bool recursive) | 删除指定目录,如果bool值为true,删除子目录中的所有目录内容 |
GetDirectories(string path) | 得到当前目录的子目录 Directory[]接收 |
GetFiles(string path) | 得到当前目录的所有文件 File[]接收 |
DirectoryInfo 类
DirectoryInfo 是非静态类
使用时必须创建对象才能使用:
DirectoryInfo directoryInfo = new DirectoryInfo(string path);
它的主要属性和方法如下表所示:
方法/属性 | 说明 |
---|---|
Delete() //方法 | 删除目录 |
Exists //属性 | 用于检查指定目录是否存在,返回bool |
MoveTo(string destFileName) //方法 | 将目录移动到一个新路径(新路径不能已存在相同的目录名) |
Name //属性 | 获取目录的名字 |
parent //属性 | 父级目录 |
3、静态类和非静态类的区别
静态类 | 非静态类 |
---|---|
用static修饰 | 不用static修饰 |
只包含静态成员 | 可包含静态成员 |
不可以包含实例成员 | 可以包含实例成员 |
使用类名调用静态成员 | 实例对象调用非静态成员 |
不能被实例化 | 可以被实例化 |
不能包含实例构造函数 | 包含实例构造函数 |
注意:使用static修饰的类也不能够被继承。