首页 > 解决方案 > 无效的目录斜杠

问题描述

我现在遇到了一个奇怪的问题。我正在尝试从 StreamingAssets 加载本地化 json 文件。我正在使用 Path.Combine 将 StreamingAssetsPath 和 Path 组合在一起以形成完整路径。Path 的值为 en-us。但由于某种原因,Path.Combine 在连接字符串时会抛出一个 \ ,所以我的路径无效。如果我将 Path 的值更改为 /en-US,那么它将完全切断 Application.StreamingAssetsPath 部分。

Path = en-US 的 Debug.Log 结果:

C:/Users/bluem/Documents/Fishtale/Assets/StreamingAssets\en-US

Path = /en-US 的 Debug.Log 结果

/zh-CN

我只是无法对这种奇怪的事情产生头绪或故事,哈哈。

public void LoadLocalizedText()
    {
        localizedText = new Dictionary<string, string>();
        string filePath = Path.Combine(Application.streamingAssetsPath, path);

        Debug.Log(filePath);

        if (File.Exists(filePath))
        {
            string dataAsJson = File.ReadAllText(filePath);
            LocalizationData loadedData = JsonUtility.FromJson<LocalizationData>(dataAsJson);

            for (int i = 0; i < loadedData.items.Length; i++)
            {
                localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
            }

            Debug.Log("Localization Manager: Data loaded, dictionary contains: " + localizedText.Count + " entries.");
        }
        else
        {
            Debug.LogError("Localization Manager: Cannot find data file name: " + filePath);
            return;
        }

        isReady = true;
    }

标签: c#fileunity3dio

解决方案


我会回答我自己的问题。提供的答复很有帮助,但不是问题的解决方案。

问题实际上不在代码中,而在于对正在传递的文件的引用。该文件需要包含 .json 的扩展名,否则它根本找不到它。所以在这种情况下,答案是将 Path 的值从 en-US 更改为 en-US.json。


推荐阅读