一、文件概述
我们知道,程序中的数据通常是保存在内存中的,当程序关闭后,这些内存中的数据就会被释放,所以如果要保存程序中的数据或者程序计算的结果,我们有两种方式保存:数据库和文件。通常,数据库适用于大批量的包含复制查询的数据维护。对于简单的数据,用数据库进行存储操作复杂而且成本较高。而文件适合于相对简单的数据保存,如很多程序的用户配置信息都保存在文件中。
在我们平时使用计算机时,常常会碰到各种各样的文件,它们都是用来保存特定数据的。计算机使用工具的不同,读取和保存的文件也不同。
二、如何读写文件
在C#程序里读写一个文件需要以下五个步骤。
a. 创建文件流
b. 创建阅读器或者写入器
c. 执行读写操作
d. 关闭阅读器或者写入器
f. 关闭文件流
//用一个示例来了解文件的读写
//先导包
//using System.IO;
FileStream fs=new FileStream("文件路径",fileMode.Create);
//写入器
StreamWriter sw=new StreamWriter(fs,Encoding.Default);
//阅读器
//StreamReader sr=new StreamReader(fs,Encoding.Default);
sw.Write("I Love C#");
sw.Close();
fs.Close();
1.文件流
//创建语法
FileStream fs=new FileStream(string filePath,fileMode.Create);
其中的filepath是指定要操作的文件,而fileMode是指定文件的打开方式,它是一个枚举。该枚举的常用成员如下:
a. CreateNew:创建新的文件,如果存在会异常。
b. Create:创建新的文件,如果已存在就直接打开文件,进行操作。
c. Open:如果文件存在就打开,不存在会异常
d. OpenOrCreate:如果文件存在就打开,不存在就创建一个再打开。
e. Append:打开文件,在文件末尾追加内容。
f. Truncate: 打开文件,清空内容再写。
2. StreamWriter写入器
//语法
StreamWriter sw = new StreamWriter(FileStream fs,Encoding.Default);
//Encoding.Default的作用下面的内容会解释
创建好写入器,可以调用它的方法将写入的内容写入文件流,其中的主要方法如下:
a. StreamWriter.Write(): 输出不换行
b. StreamWriter.WriteLine(): 输出换行
c. StreamWriter.Close(): 关闭写入器
3. StreamReader阅读器
//语法
StreamReader sr = new StreamReader(FileStream fs,Encoding.Default);
创建好阅读器,可以调用它的方法将写入的内容从文件流里读取出来,其中的主要方法如下:
a. StreamReader.ReadLine(): 读取一行
b. StreamReader.ReadToEnd(): 从当前位置读取到末尾
c. StreamReader.Close(): 关闭阅读器
4. 乱码问题
在上面的示例中有提到 “Encoding.Default”,现在我就来介绍介绍。不论是在写入还是读取的时候,有可能会出现乱码,而这并不是C#的问题,是因为不同的文件编码格式可能不同,而只要在写入或者读取的时候指定对应的编码格式,就可以了。一般系统的编码格式是ANSI,而Encoding.Default就是指获取操作系统的当前编码。
三、文件和目录的操作
1.File类和FileInfo类
我们学习了读写文件,其实文件不仅仅只有这些操作,还可以移动文件,复制文件,删除文件等等。而.Net框架类库向我们提供了File类和 FileInfo类,该类也位于System.IO命名空间中,来进行文件的操作。主要操作方法如下表:
File类(静态类) | ||
---|---|---|
返回值类型 | 方法名称 | 说明 |
bool | Exists(string path) | 判断文件是否存在 |
void | Copy(string sourceFilePath,string destinationFilePath) | 将指定路径的源文件的内容复制到目标文件中 |
void | Move(string sourceFilePath,string destinationFilePath) | 将指定文件移到一个新路径 |
void | Delete(string path) | 删除指定文件 |
void | Create(string path) | 创建新文件 |
FileInfo类(非静态类) | ||
---|---|---|
属性 | 说明 | |
Exists | 判断文件是否存在 | |
Extension | 获取文件后缀 | |
Name | 获取文件名 | |
FullName | 获取全路径 | |
返回值类型 | 方法 | 说明 |
FileInfo() | CopyTo(string path) | 将现有文件复制到新文件 |
void | Delete() | 删除文件 |
void | MoveTo(string path) | 将指定文件移到新位置 |
2. Directory类和DirectoryInfo类
提到文件的操作,就不能不提如何操作目录(文件夹)。如下表:
Directory类(静态类) | ||
---|---|---|
返回值类型 | 方法名称 | 说明 |
bool | Exists(string path) | 判断目录(文件夹)是否存在 |
void | Move(string sourceFilePath,string destinationFilePath) | 将指定目录移到一个新位置 |
void | Delete(string path,bool recursive) | 删除目录,如果recursive值为true,删除子目录中的使有目录 |
string[] | GetDirectories(string path) | 获取所有子目录 |
string[] | GetFile(string path) | 获取所有文件 |
DirectoryInfo(非静态类) | ||
---|---|---|
属性 | 说明 | |
Exists | 判断目录(文件夹)是否存在 | |
Name | 获取目录的名称 | |
Parent | 获取父级目录 | |
返回值类型 | 方法 | 说明 |
void | MoveTo(string path) | 将指定目录移到新位置 |
void | CreateSubDirectoy(string path) | 创建子目录 |
void | Delete(string path,bool recursive) | 删除目录,如果recursive值为true,删除子目录中的使有目录 |
Directories[] | GetDirectories(string path) | 获取所有子目录 |
File[] | GetFile(string path) | 获取所有文件 |
3.静态类和静态方法
File类和Directory类都是静态类,使用方法时不需要实例化,直接用类名.方法()的方式调用。静态方法需要类名访问,同时使用static关键字修饰。静态类和非静态类的区别如下:
静态类 | 非静态类 |
---|---|
用static修饰 | 不用static修饰 |
只包含静态成员 | 可以包含静态成员 |
不可以包含实例成员 | 可以包含实例成员 |
使用类名调用静态成员 | 使用实例对象调用非静态成员 |
不能实例化 | 可以实例化 |
不包含实例构造函数 | 包含实例构造函数 |
来源:CSDN
作者:张笑笑L
链接:https://blog.csdn.net/zx091999/article/details/104515041