• 文件操作


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

        如何读写文件

      通常来讲,用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类。

  • 相关阅读:
    因为付出,所以喜欢。开发就是这么坑!
    停滞在一个圈子,决定人生的高低![深度文章]
    我不曾忘记的初心-程序员如何看待买房子
    能力要进化-还在技术停滞不前吃老本吗?
    能力要进化-还在技术停滞不前吃老本吗?
    我不曾忘记初心-我们最终都成了自己讨厌的人
    我不曾忘记初心-我们最终都成了自己讨厌的人
    我不曾忘记的初心-冒险努力正是你缺少的!
    我不曾忘记的初心-冒险努力正是你缺少的!
    JS之正则表达式
  • 原文地址:https://www.cnblogs.com/cnsdhzzl/p/5249670.html
Copyright © 2020-2023  润新知