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

最近有機會接觸到用 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 筆記,有時候完整且複雜的功能會不好用,最單純最簡單的寫法反而會比較貼近人心。如有任何疑問歡迎在留言版提出!

0 留言
Inline Feedbacks
View all comments
[convertkit form=2362222]
0
對這邊的內容有什麼想法嗎?你可以在討論區留言喲!x
()
x