文件操作

  保存程序中的数据或者程序计算的结果(这个过程有时也被称为数据持久化)我们可以考虑采取以下两种方式:数据库和文件。通常数据库适用于大批量的包含复杂查询的数据维护。对于简单的数据,用数据库进行存储操作复杂而且成本较高。而文件适用于相对简单的数据保存,如很多程序的用户配置信息都会保存在文件中。

    如何读写文件

  通常来讲,用C#程序读写一个文件需要以下5个基本步骤。

  1.创建文件流

  2.创建阅读器或者写入器

  3.执行读写操作

  4.关闭阅读器或者写入器

  5.关闭文件流

  这里需要在类中引入System.IO命名空间。

  using System.IO;

  这个命名空间用于对文件和文件流的处理。

    文件流

  FileStream类主要用于读写文件中的数据,在创建一个文件流时,需要在它的构造函数中指定参数。

语法:

  FileStream 文件流对象=new FileStream(String filePath,fileMode);

  其中

  Create:用指定的名称创建一个文件,。如果文件存在,则改写就文件。

  CreateNew:新建一个文件。如果文件存在会发生异常,提示文件以及存在。

  Open:打开一个文件。使用这个枚举值时,指定文件必须存在,否则发生异常。

  OpenOrCreate:OpenOrCreate与Open成员类似,只是如果文件不存在,则用指定的名称新建一个文件并打开它。

  Append:打开现有文件,并在文件末追加内容。

    关闭文件流

  写入结束后一定要关闭文件流    文件流对象.Colse();

    文件读写器

  StreamWriter写入器
  创建文件流之后,我们要创建读取器或者写入器,StreamWriter类称为写入器,用于将数据写入文件流,只要讲创建好的文件流传入,就可以创建它的实例,例如:

  StreamWriter Sw=new StreamWriter(Fs);

  创建好写入器后,可以调用它的方法将要写入的内容写入文件流,其中的主要方法如下。

  StreamWriter.Writer():用于写入流,这个例会就是我们创建好的流。

  StreamWriter.WriteLine():用于写入一行数据,写入某些数据后跟换行符。

  StreamWriter.Close():用于关闭写入器。

  需要注意的是,当写入器使用完毕,关闭写入器的方法是必须调用的,否则会出现要写的内容无法写入文件的情况。

  如果一个程序用来多个、写入器,它们的关闭顺序一般要和自身在程序总被创建的顺序相反。

    StreamReader读取器

  StreamReader主要用于读取流中的数据,它主要包含以下几种方法。

  StreamReader.ReadLine():读取文件流中的一行数据,病返回字符串。

  StreamReader.ReadToEnd():从当前位置读到末尾,返回字符串。

  StreamReader.Close():用于关闭读取器。

    解决乱码问题  

  Encoding类位于System.Text命名空间,用来表示字符编码。

  1.可以通过Encoding类的静态成员指定编码格式。例如:

    Encoding.UTF8:获取UTF-8格式的编码。

    Encoding.Default:获取操作系统的当前编码。

  2.也可以通过Encoding类的静态方法GetEncoding(String name)指定字符编码,参数name必须是C#支持的编码。例如:

  StreamReader Sr=new StreamReader(Fs.Encoding.GetEncoding("GB2312"));

    文件和目录操作

  File类和Directory类

  

File类的常用方法
返回值类型 方法名称 说明
bool Exists(string path) 用于检查指定文件是否存在
void Copy(string sourceFilePath,string destinationFilePath) 将指定路径的源文件中的内容复制到目标文件中,如果目标文件不存在,则在指定路径中新建一个文件
void Move(string sourceFileName,string desFileName) 将指定文件移到一个新的路径
void Delete(string Path) 删除指定的文件,如果指定的文件不存在,则不引发一场

  需要注意的是,File类的Exists()方法在进行文件操作时常常用到。很明显,如果不事先判断文件是否存在,那么对于文件的复制,移动,删除等操作都有可能失败。

    静态类和静态方法

  File类和Directory类在使用它们的方法时都不需要实例化,二十直接使用类名.方法()的方式调用。这其实和是静态方法的调用方式,静态方法需要用类名来访问,同事使用static关键字修饰,现在我们要介绍一个新的概念:静态类。静态类只含有静态方法,不能使用NEW关键字创建静态类的实例。

静态类与非静态类的区别
用static修饰 不用static修饰
只包含静态成员 可以包含静态成员
不可以包含实例成员 可以包含实例成员
使用类名调用静态成员 使用实例对象调用非静态成员
不能被实例化 可以被实例化
不能包含实例构造函数 包含实例构造函数

语法:

class 类名
{
   public  static 数据类型 变量名;
   public static 返回值 方法名(参数列表)
   {
     //方法体
   }  
}

    提供实例方法的文件和目录操作

  FileInfo类和File类的功能类似,都可以完成对文件的复制,移动,删除等操作。不同的是,使用FileInfo类必须实例化对象。

  同样,DirectoryInfo类和Directory类的功能类似,都可以完成对目录的复制,移动,删除等操作。但是使用DirectoryInfo类必须实例化对象。

    读取目录下的子目录信息

  操作目录可以使用Directory类和DirectoryInfo类。由于资源管理器中的目录需要多次使用,所以优先选择DirectoryInfo类。

原文地址:https://www.cnblogs.com/cnsdhzzl/p/5249670.html