-1

我正在尝试在 XNA 中编写一个漂亮的内容加载器,以避免必须单独加载每个资产。但是,我无法描述目录位置,因为 File 操作的默认目录是 exe 的位置,但 XNA 的 Content.Load 使用 Content 文件夹的默认目录。

foreach (string subD in Directory.GetDirectories("..\\..\\..\\..\\Happy WorkerContent\\gfx\\", "*.*", SearchOption.AllDirectories))
{
    foreach (string s in Directory.GetFiles(subD))
    {
        string file = Path.GetFileNameWithoutExtension(s);
        if (Enum.IsDefined(typeof(Tex), file))
        {
            Console.WriteLine(subD);
            Console.WriteLine(file);
            GXDict.Add(Path.GetFileNameWithoutExtension(s), GV.C_Game1.Content.Load<Texture2D>(subD + "\\" + file));
        }
    }
}

我的错误是因为 subD 是,例如,“........\Happy WorkerContent\gfx\level entity\terrains”,但 Content.Load 需要“gfx\level entity\terrains”。

我可以做一些类似 subD.Substring(32) 的事情,但这看起来很混乱,特别是如果我稍后重命名任何文件夹或任何东西(并且可能在已发布的版本中不起作用?)。有没有一种好方法可以说“我只想要“Happy WorkerContent”目录之后的文件部分?

4

1 回答 1

0

您可以编写一个方法来返回特定目标字符串之后的文本。

然后,如果您需要搜索不同的字符串,您只需将不同的目标字符串传递给该方法。

例如:

// Returns the contents of text following the target string,
// or "" if the target string wasn't found.

public static string ContentAfter(string text, string target)
{
    int index = text.IndexOf(target);

    if (index >= 0)
        return text.Substring(index + target.Length);
    else
        return "";
}

然后你会这样称呼它:

string test = "..\\..\\..\\..\\Happy WorkerContent\\gfx\\whatever";
string target = "\\Happy WorkerContent\\";

string following = ContentAfter(test, target);

如果您有两个与文本中的目标字符串匹配的字符串,那将不会那么好。该方法将返回第一次匹配后的所有文本,当然包括第二个目标字符串。

于 2013-05-19T15:27:25.783 回答