C#获取目录下所有文件的列表——最白话,手把手教你做系列。

最近,在试着做一个Unity自动生成Ui的功能。
理论比较简单,通过拼接字符串生成脚本,都是Ok的,但为了更方便,就想顺便把文件路径也自动生成一下。即获取某个目录下所有预制体的文件目录。
于是就需要一个如题所示的方法。

代码如下:

		string prefabDir = "Assets/Resources/MyUI/View/";
        DirectoryInfo direction = new DirectoryInfo(prefabDir);
        //DirectoryInfo.GetFiles返回当前目录的文件列表      
        FileInfo[] files = direction.GetFiles("*", SearchOption.AllDirectories);
        for (int i = 0; i < files.Length; i++)
        {
            if (!files[i].Name.EndsWith(".prefab")) continue;
            string prefabPath = files[i].Name.Split('.')[0];
            
        }

这个方法不难找,但我找到这个方法的时候比较好奇方法里填的参数 “*” 是什么东西,然后找了很多关于这个方法参数的描述。
参数

searchPattern
String

要与文件名匹配的搜索字符串。 此参数可以包含有效文本路径和通配符(* 和 ?)的组合,但不支持正则表达式。

searchOption
SearchOption

指定搜索操作是应仅包含当前目录还是应包含所有子目录的枚举值之一。
SearchOption是设置文件夹的。TopDirectoryOnly值检索当前文件夹。AllDirectories检索当前文件夹及子文件夹

虽然看了官方描述,但仍然不是很明白是什么意思。只知道是个字符串。然后继续搜关键字。

通配符

通配符是一种特殊语句,主要有星号(*)和问号(?),用来模糊搜索文件。当查找文件夹时,可以使用它来代替一个或多个真正字符;当不知道真正字符或者懒得输入完整名字时,常常使用通配符代替一个或多个真正的字符。 实际上用“*Not?pad”可以对应Notepad\MyNotepad【*可以代表任何字符串;?仅代表单个字符串,但此单字必须存在】;Notep[ao]d可以对应Notepad\Notepod【ao代表a与o里二选一】,其余以此类推。

这么联系起来就大概知道是什么意思了。大概就是用 “*” 代替了一些字符。但具体代替什么呢,如下:

searchPattern中允许使用以下通配符说明符。
通配符 说明

  • (星号) 零个或多个字符。
    ? (问号) 正好为零或一个字符。
    不保证返回的文件名的顺序;如果需要特定的排序顺序,请使用 Sort 方法。

允许使用通配符。 例如,searchPattern 字符串 “* .txt” 搜索扩展名为 “txt” 的所有文件名。 searchPattern 字符串 “s*” 搜索所有以字母 “s” 开头的文件名称。 如果没有文件,或者没有与 DirectoryInfo中的 searchPattern 字符串匹配的文件,则此方法将返回一个空数组。

备注

在 searchPattern 中使用星号通配符(例如 “* .txt”)时,匹配行为因指定文件扩展名的长度而异。 文件扩展名正好为三个字符的 searchPattern 返回扩展名为三个或更多字符的文件,其中前三个字符与 searchPattern中指定的文件扩展名相匹配。 文件扩展名为一个、两个或三个以上的字符的 searchPattern 仅返回扩展名正好与 searchPattern中指定的文件扩展名匹配的文件。 使用问号通配符时,此方法只返回与指定文件扩展名匹配的文件。 例如,如果一个目录中有两个文件,“file1” 和 “txtother”,则为 “file?” 的搜索模式。txt “仅返回第一个文件,而” file*.txt "的搜索模式返回这两个文件。

以上是对这个方法的搜索结果。
大概就是可以使用通配符加一些字符来达到定向搜索一些文件的方法。第一个参数是指搜索结果中包含参数1内容的文件。

完结撒花。

发布了27 篇原创文章 · 获赞 26 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_39860954/article/details/103717805