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 篇原創文章 · 獲贊 29 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章