【问题标题】:Only include later subdirectories in file string C#仅在文件字符串 C# 中包含后面的子目录
【发布时间】:2013-05-14 05:06:12
【问题描述】:

我正在尝试在 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 entities\terrains”,但 Content.Load 需要“gfx\level entities\terrains”。

我可以执行 subD.Substring(32) 之类的操作,但这看起来很混乱,尤其是如果我稍后重命名任何文件夹或其他任何内容(并且在已发布的版本中可能无法使用?)。有没有什么好办法说“我只想要”Happy WorkerContent”目录之后的文件部分?

【问题讨论】:

    标签: c# string directory


    【解决方案1】:

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

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

    例如:

    // 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);
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-06
      • 2020-10-15
      • 1970-01-01
      • 2013-03-29
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多