前言
閱讀項目編輯器的代碼時,發現好多與文件(夾)路徑相關代碼。本來自己之前對路徑相關的東西就模模糊糊,希望通過這篇筆記能讓自己模糊的地方明朗一下。
" / " 與 " \ "
你是否有過這樣的疑惑:Windows電腦上的文件路徑是"E:\Project\unityruntime\Assets",使用的是反斜杠\。而C#或Unity中文件的代碼路徑是"E:/Project/unityruntime/Assets",使用的是正斜杠/。其實道理是一樣的,都是作為路徑分隔符,只是不同平臺或語言環境使用的字符不同。大多數 .NET/Unity 的路徑處理函數都能識別混合的斜杠方向,包括同時出現正斜杠 / 和反斜杠 \ 的情況。系統會在內部把它們視作有效的路徑分隔符,通常不會報錯。
Application.dataPath
順便提一嘴"Application.dataPath",此為Unity資產Assets目錄。
特別注意:
后面路徑開頭要帶正斜杠" / "。
string filePath = Application.dataPath + "/../../策劃文檔/Config";
/. 與 /..
" /. " 代表當前目錄。
" /. ." 代表上級目錄。
Path類
1).GetFullPath方法
把給定的路徑規范化成一個唯一、規范的絕對路徑。
我的理解就是將不明確的路徑重構,轉換成一個完整、明確的絕對路徑。
2).Combine方法
路徑拼接。
Debug.Log($"{Path.Combine(Application.dataPath, "/TestFloder")}");
### 打印信息:/TestFloder
### 問題原因:
### Path.Combine 在遇到以斜杠開頭的路徑段時,會把它當成絕對路徑來處理,前面的部分會被丟棄,直接返回第二段的絕對路徑。### 問題修改:去掉正斜杠
### Debug.Log($"{Path.Combine(Application.dataPath, "TestFloder")}");
### 打印信息:F:/Demo/NewTestDemo/Assets\TestFloder
意外發現:在Log拼接后的路徑的時候發現.Net/Unity能識別正反斜杠混合的路徑。
Directory類
DirectoryInfo類
DirectoryInfo directory = new DirectoryInfo(dirPath);
FileInfo[] files = directory.GetFiles("*.json", SearchOption.TopDirectoryOnly);
如果你想操作“dirPath”路徑的文件夾,首先new一個“dirPath”路徑的“DirectoryInfo”文件夾操作對象。
" *.json "匹配文件后綴為json的文件。
"?SearchOption.TopDirectoryOnly "為操作的對應目錄層級,此處代表"dirPath"目錄的文件。若改為"SearchOption.AllDirectories",則會遞歸搜索"dirPath"目錄及所有子目錄中的符合條件的文件。
File類
1).Copy方法
File.Copy 的兩個參數 sourceFileName 和 destFileName 都可以是絕對路徑,也可以是相對路徑。
- sourceFileName
- 源文件的路徑。可以是相對路徑或絕對路徑。路徑必須指向一個現有的文件,否則會拋出 System.IO.FileNotFoundException。
- destFileName
- 目標文件的路徑。可以是一個新的文件路徑,也可以是已存在的文件路徑(當 overwrite 為 true 時會覆蓋)。
- 目標路徑所在的目錄需要存在;如果目錄不存在,會拋出 DirectoryNotFoundException。你可能需要在復制前確保目錄存在,必要時用 Directory.CreateDirectory。
- overwrite
- 指定是否覆蓋目標文件。默認重載在不傳 overwrite 時為 false(不覆蓋)。
- 如果目標文件存在且 overwrite 為 false,會拋出 IOException。
- 如果 overwrite 為 true,目標文件存在時會被覆蓋。
FileInfo類
FileInfo類的實例對象FullName表示文件的完整路徑(絕對路徑)。