CH12-操作文件

本章目标

  1. 掌握文本文件的读写
  2. 会进行文件和文件夹操作

本章内容

1、文件流

  1. 关于文件概述:

    1. IO操作:文件/文件夹操作与读写。

    2. 文件夹:用来管理计算机文件的,每一个文件夹对应一块磁盘空间。它提供了指向对应空间的地址,它没有扩展名,也就不像文件的格式用扩展名来标识。

    3. 文件:一个具有符号的一组相关联元素的有序序列。文件可以包含范围非常广泛的内容。系统和用户都可以将具有一定独立功能的程序模块、一组数据或一组文字命名为一个文件,它具有永久存储。

    4. :是一个字节序列,可用于对后备存储进行读取和写入操作,后备存储可以是多个存储媒介之一(例如,磁盘或内存)。

    5. Stream 支持读取和写入字节。所有表示流的类都继承自Stream类。

      流涉及三个基本操作:
      (1)读取– 将数据从流传输到数据结构(如字节数组)中。
      (2)写入– 将数据从数据源传输到流。
      (3)查找– 对流中的当前位置进行查询和修改。

      img

  2. 引入System.IO命名空间—提供文件操作的类

    1. System.IO 命名空间有各种不同的类,用于执行各种文件操作,如创建和删除文件、读取或写入文件,关闭文件等。

    2. 下表列出了一些 System.IO 命名空间中常用的非抽象类:

      1722242373544

  3. 文件流(FileStream类)

    1. 作用:用于读写文件

    2. 实现文件读写功能步骤:

      1722243207190

    3. 语法:

      1
      2
      FileStream <object_name> = new FileStream( <file_name>,
      <FileMode Enumerator>, <FileAccess Enumerator>, <FileShare Enumerator>);
    4. 例如:

      1
      FileStream F = new FileStream("sample.txt", FileMode.Open, FileAccess.Read, FileShare.Read);
    5. 参数详细讲解:

      1722242553459

    6. 创建写入器和读取器

      1. 文本文件写入器:StreamWriter

        1. 方法说明:
          1. Write():写入方法
          2. WriteLine():写入方法,加一换行符
        1
        2
        3
        4
        StreamWriter mySw = new StreamWriter(文件流对象);
        mySw.Write(content);

        mySw.WriteLine(content);
      2. 文本文件读取器:StreamReader

        1. 方法说明:
          1. ReadToEnd():读取到文件末尾
          2. ReadLine():读取一行
        1
        2
        3
        4
        StreamReader mySr = new StreamReader(文件流对象);
        content = mySr.ReadToEnd();

        content = mySr.ReadLine();
    7. 案例:

      1. 写入文件:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        //1. 创建文件流对象
        FileStream fs = new FileStream("test.txt",FileMode.CreateNew);
        //2. 创建写入器对象
        StreamWriter sw= new StreamWriter(fs);//传入文件流对象
        //3. 执行写入操作
        sw.Write("大家好,我在写入文件中,,,");
        //4. 关闭写入器对象
        sw.Close();
        //5. 关闭文件流对象
        fs.Close();
      2. 读取文件:

        1
        2
        3
        4
        5
        6
        7
        8
        9
        10
        11
        //1. 创建文件流对象
        FileStream fs = new FileStream("test.txt", FileMode.Open);
        //2. 创建读取器对象
        StreamReader sr = new StreamReader(fs,Encoding.Default);
        //3. 执行读取操作
        string str = sr.ReadToEnd();
        Console.WriteLine(str);
        //4. 关闭读取器
        sr.Close();
        //5. 关闭文件流
        fs.Close();
      3. 注意事项:

        1. 如果一个程序用了多个流、读写器,它们的关闭顺序一般要和自身在程序中被创建的顺序相反。关闭原则 :先用后关

        2. 读取包含中文的TXT文件时,可能出现中文乱码:

          Encoding.UTF8或Encoding.Default或Encoding.GetEncoding(“XXX”)

          1
          StreamReader sr = new StreamReader(fs,Encoding.Default);

2、文件/目录操作

  1. File类:提供操作文件的各种方法

    方法 说明
    bool Exists(string path) 用于检查指定文件是否存在,该方法返回一个布尔值
    void Copy(string sourceFileName,string destFileName) 将指定路径的源文件中的内容复制到目标文件中,如果目标文件不存在,则在指定路径中新建一个文件
    void Move (string sourceFileName, string destFileName) 将指定文件移动到一个新的路径
    void Delete(string path) 删除指定的文件,如果指定的文件不存在,则不引发异常

    演示案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    if (File.Exists("test.txt"))
    {
    Console.WriteLine("文件已经存在!");
    //复制文件
    File.Copy("test.txt","test1.txt",true);
    Console.WriteLine("复制文件成功~");

    //删除原来的文件
    File.Delete("test.txt");
    File.Move("test1.txt", "D://test.txt");
    }
  2. Directory 类提供对文件夹的移动、删除等操作

    方法 说明
    bool Exists(string path) 用于检查指定文件夹在磁盘上是否存在
    void Move(string sourceDirName, string destDirName) 用于将文件或目录及其内容移到新位置
    void Delete(string path, bool recursive) 删除指定目录,如果bool指定true,则删除子目录中的所有目录内容
    void Delete(string path) 从指定路径删除空目录

3、FileInfo类

  1. 概述:

    FileInfo 类派生自 FileSystemInfo 类。它提供了用于创建、复制、删除、移动、打开文件的属性和方法,且有助于 FileStream 对象的创建。该类不能被继承。

  2. 属性:

    1722245619084

  3. 方法:

    1722245763980

  4. 演示案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    FileInfo fileInfo = new FileInfo("test1.txt");

    //判断文件是否存在
    if(fileInfo.Exists )
    {
    Console.WriteLine("文件存在~");

    Console.WriteLine("文件名:"+fileInfo.Name);
    Console.WriteLine("文件完整名:"+fileInfo.FullName);
    Console.WriteLine("文件扩展名:"+fileInfo.Extension);
    Console.WriteLine("文件大小:"+fileInfo.Length);
    Console.WriteLine("文件创建时间:"+fileInfo.CreationTime);

    fileInfo.CopyTo("test.txt");//复制文件
    fileInfo.Delete();//删除文件

    }

    显示结果:

    1722246415855

4、DirectoryInfo类

  1. 概述:

    DirectoryInfo 类派生自 FileSystemInfo 类。它提供了各种用于创建、移动、浏览目录和子目录的方法。该类不能被继承。

  2. 属性:

    1722246562391

  3. 方法:

    1722246590279

  4. 演示案例:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    DirectoryInfo directoryInfo = new DirectoryInfo("test");

    if (directoryInfo.Exists)
    {
    Console.WriteLine("目录已经存在~");
    Console.WriteLine("目录名称:"+directoryInfo.Name);
    Console.WriteLine("目录完整名称:"+directoryInfo.FullName);
    Console.WriteLine("目录创建时间:"+directoryInfo.CreationTime);

    directoryInfo.MoveTo(Directory.GetCurrentDirectory());
    directoryInfo.Delete();//删除空目录
    directoryInfo.Delete(true);//删除目录及目录的子目录或文件
    }

本章总结

1722247065885

本章作业

  1. 通过文件流,实现一个简单的记事本软件

  2. 完善11章作业的项目,网络电视精灵

  3. 开发小型资源管理器,可以浏览文件信息

    1722247257670

  4. 实现文件复制

    1722247314446

  5. 实现文件删除

    1722247344001