[Unity] 檔案/資料夾路徑字串組合方法 Path.Combine

發表日期:
2021.03.06
/
分類:
最近有機會接觸到用 C# 來操作 StreamingAssets 資料的功能,所以會大量接觸「檔案路徑」的資料處理。然而我對於必須用 A + "/" + B + "/" + C 來組合路徑的寫法非常反感,所

最近有機會接觸到用 C# 來操作 StreamingAssets 資料的功能,所以會大量接觸「檔案路徑」的資料處理。然而我對於必須用 A + "/" + B + "/" + C 來組合路徑的寫法非常反感,所以提出了幾個解決方案來避免掉每次都得手動組合路徑的情況。

目前有兩種方法可以取代手動組合的情況:

System.IO.Path.Combine

這個是 System.IO 下的方法,它的好處是會自動偵測路徑是否合法,與自動轉換相對與絕對路徑並重新組合。但是當他使用在我的專案中出現了輸出字串空白的問題,猜測是其中作為路徑的字串參數會導致此方法無法正確判定,所以它讓我寫出了第二種解決方法 PathTool.Combine。

Path.Combine 的用法很簡單,假如我有「Application.streamingAssetsPath」、「Language」和「Config.csv」,組合寫法如下:

using UnityEngine; public class PathScript : MonoBehaviour { private void Start() { Debug.Log(GetConfigPath()); } public string GetConfigPath() { string path = System.IO.Path.Combine(Application.streamingAssetsPath, “Language”, “Config.csv”); return path; } }

輸出後會獲得:

C:/Project/Project_Text/Assets/StreamingAssets\Language\Config.csv

你可能會介意斜線方向,但以一般用途來說不影響之後的操作。有需要再自行用 String 的 Replace 功能來取代。

自製 PathTool.Combine

為了解決我遇到的輸出空白問題,就自行寫了一個單純用 for 迴圈組合字串、沒有做任何合法驗證的方法。這邊有個 params 關鍵字還挺有趣,他可以讓後面接的陣列變成參數化的寫法。

public class PathTool { public static string Combine(params string[] paths) { string result = “”; for(int i = 0; i < paths.Length; i++) { result += paths[i]; if (i + 1 != paths.Length) { result += “/”; } } return result; } }

至於用法就和 Path.Combine 一樣,我就不貼完整腳本了:

PathTool.Combine(Application.streamingAssetsPath, “Language”, “Config.csv”);


以上就是這次的 Unity 筆記,有時候完整且複雜的功能會不好用,最單純最簡單的寫法反而會比較貼近人心。如有任何疑問歡迎在留言版提出!

comments powered by Disqus