UD4L4——文件夹相关

本章代码关键字

1
2
3
4
5
6
7
8
9
10
11
12
13
14
Directory                          //文件夹操作类
Directory.Exists() //判断文件夹是否存在
Directory.CreateDirectory() //创建文件夹
Directory.Delete() //删除文件夹
Directory.GetDirectories() //获取该文件夹下的所有文件夹名
Directory.GetFiles() //获取该文件夹下的所有文件名
DirectoryInfo //文件夹信息类
directoryInfo.FullName //文件夹全路径
directoryInfo.Name //文件夹名
Directory.GetParent() //获取文件夹的父文件夹
directoryInfo.GetDirectories() //获取该文件夹下的所有文件夹信息对象
directoryInfo.GetFiles() //获取该文件夹下的所有文件信息对象
FileInfo //文件信息类
fileInfo.Extension //文件的后缀名属性

文件夹操作是什么

平时我们可以在操作系统的文件管理系统中,通过一些操作增删查改文件夹

我们目前要学习的就是通过代码的形式,来对文件夹进行增删查改的操作

Directory​提供给我们了常用的文件夹相关操作的API,只需要熟练使用它即可
DirectoryInfo​和FileInfo​ 一般在多文件夹和多文件操作时会用到,了解即可
目前用的相对较少 他们的用法和Directory​和File​类的用法大同小异

文件夹操作公共类

类名:Directory
命名空间:System.IO

  1. 判断文件夹是否存在

    参数:文件夹路径
    返回值:该文件夹是否存在

    1
    2
    3
    4
    5
    6
    7
    8
    if (Directory.Exists(Application.dataPath + "/数据持久化四"))
    {
    print("存在文件夹");
    }
    else
    {
    print("文件夹不存在");
    }
  2. 创建文件夹

    参数:要创建的文件夹的路径
    返回值:DirectoryInfo​目录信息类对象,具体内容在下面

    如果文件夹已存在,就不会创建文件夹,直接返回​DirectoryInfo​目录信息类对象

    1
    Directory.CreateDirectory(Application.dataPath + "/数据持久化四");
  3. 删除文件夹(值得一提的是,在某些情况下,例如Unity文件夹下存在该文件夹对应的.meta文件,这时使用该命令删除文件夹,在Unity刷新过后,这个拥有.meta文件的对应的文件夹会被Unity自动重新创建,导致出现文件夹没有被删除的假象。实际上该文件夹已经被删除,只是被Unity自己重新创建了而已,如果在刷新前删除.meta文件,或者进行某些设置,这个文件夹就无法被Unity自动重新创建)

    参数一:路径
    参数二:是否删除非空目录,如果为true​,将删除整个目录,如果是false​,仅当该目录为空时才可删除,默认为false
    如果参数二是false且文件夹非空,会报错

    1
    Directory.Delete(Application.dataPath + "/数据持久化四", true);
  4. 查找文件夹和文件

    • 得到指定路径下所有文件夹名(该路径下的所有子文件夹)

      1
      2
      3
      4
      5
      string[] paths = Directory.GetDirectories(Application.dataPath);
      foreach (string path in paths)
      {
      print(path);
      }
    • 得到指定路径下所有文件名(该路径指示的文件夹内的文件名)

      1
      2
      3
      4
      5
      string[] fileNames = Directory.GetFiles(Application.dataPath);
      foreach (string fileName in fileNames)
      {
      print(fileName);
      }
  5. 文件夹所有内容移动到新文件夹

    移动会把源文件夹中的所有内容一起移到新的路径,且不保留源文件夹

    参数一:要移动内容的文件夹
    参数二:要移动到的新文件夹

    如果第二个参数所在的路径 已经存在了一个文件夹 那么会报错

    1
    Directory.Move(Application.dataPath + "/数据持久化四", Application.dataPath + "/123123123");

DirectoryInfo

DirectoryInfo​目录信息类,我们可以通过它获取文件夹的更多信息
它主要出现在两个地方

  1. 创建文件夹方法的返回值

    1
    DirectoryInfo directoryInfo = Directory.CreateDirectory(Application.dataPath + "/数据持久化123");
    • 文件夹的全路径

      1
      print(directoryInfo.FullName);
    • 文件夹自己的名字

      1
      print(directoryInfo.Name);
  2. 查找上级文件夹信息

    1
    DirectoryInfo directoryInfo = Directory.GetParent(Application.dataPath + "/数据持久化123");
    • 文件夹的全路径

      1
      print(directoryInfo.FullName);
    • 文件夹自己的名字

      1
      print(directoryInfo.Name);

得到所有子文件夹的目录信息(重要方法)

1
2
3
4
5
DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
foreach (var info in directoryInfos)
{
print(info.FullName);
}

FileInfo

文件信息类,我们可以通过DirectoryInfo​得到该文件下的所有文件信息

获取文件夹下所有的文件信息

1
2
3
4
5
6
7
8
9
10
FileInfo[] fileInfos = directoryInfo.GetFiles();
foreach (var info in fileInfos)
{
print("--------------------------");
print(info.FullName); //文件全路径
print(info.Name); //文件名
print(info.Length); //字节长度
print(info.Extension); //后缀名
}

文件的后缀名

1
2
3
4
5
6
7
8
9
10
11
12
[MenuItem("DataPersistence/ExcelToBinaryData")]
private static void GenerateBinaryDataByExcel()
{
//加载指定路径中的所有Excel文件,用于生成对应的三个文件
DirectoryInfo directoryInfo = Directory.CreateDirectory(Application.dataPath + "/ArtRes/Excel");
//得到指定路径中的所有文件信息,得到所有的Excel表
FileInfo[] files = directoryInfo.GetFiles();
for (int i = 0; i < files.Length; i++)
{
Debug.Log(files[i].Name + "," + files[i].Extension);
}
}

打开文件获取文件流

可以通过FileInfo​直接打开文件获取信息流

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
[MenuItem("DataPersistence/ExcelToBinaryData")]
private static void GenerateBinaryDataByExcel()
{
//加载指定路径中的所有Excel文件,用于生成对应的三个文件
DirectoryInfo directoryInfo = Directory.CreateDirectory(EXCEL_PATH);
//得到指定路径中的所有文件信息,得到所有的Excel表
FileInfo[] files = directoryInfo.GetFiles();
for (int i = 0; i < files.Length; i++)
{
//非Excel文件直接跳过
if (files[i].Extension != ".xlsx" && files[i].Extension != ".xls")
continue;
using (FileStream fileStream = files[i].Open(FileMode.Open, FileAccess.Read))
{
IExcelDataReader excelReader = ExcelReaderFactory.CreateBinaryReader(fileStream);
DataSet dataSet = excelReader.AsDataSet();
fileStream.Close();
}
}
}