文件操作

纵然是瞬间 提交于 2020-02-26 14:43:50

一、文件概述

​ 我们知道,程序中的数据通常是保存在内存中的,当程序关闭后,这些内存中的数据就会被释放,所以如果要保存程序中的数据或者程序计算的结果,我们有两种方式保存:数据库和文件。通常,数据库适用于大批量的包含复制查询的数据维护。对于简单的数据,用数据库进行存储操作复杂而且成本较高。而文件适合于相对简单的数据保存,如很多程序的用户配置信息都保存在文件中。

​ 在我们平时使用计算机时,常常会碰到各种各样的文件,它们都是用来保存特定数据的。计算机使用工具的不同,读取和保存的文件也不同。

二、如何读写文件

在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修饰
只包含静态成员 可以包含静态成员
不可以包含实例成员 可以包含实例成员
使用类名调用静态成员 使用实例对象调用非静态成员
不能实例化 可以实例化
不包含实例构造函数 包含实例构造函数
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!