【问题标题】:How to check a asset file is YAML or Binary format? And am I switch it's format directly?如何检查资产文件是 YAML 还是二进制格式?我是直接切换它的格式吗?
【发布时间】:2020-03-17 03:13:26
【问题描述】:

出于某种原因,我需要编辑 xxx.preafb 文件,但 Unity .prefab 文件有两种格式,二进制或 YAML 那么如何检测xxx.prefabYAML 格式还是binary。如果我检测到这个文件是二进制格式,我该如何切换到YAML。 我知道 Editor > AssetSerialization > Mode 它可以格式化项目的所有资产,但是变化太大了...

【问题讨论】:

  • 如何区分使用由 YAML 格式序列化的预制件,当您打开“YAML”文件时,它的标题类似于“%YAML 1.1”,所以如果“*.prefab”文件没有 yaml标头,那么您可以将其作为二进制文件,否则它将是 YAML 文件
  • 因此,当您阅读第一行包含 '%YAML x.x' 的预制件时,它将是 YAML 格式,否则为二进制
  • @BrianChoi 好主意!

标签: c# unity3d yaml


【解决方案1】:

@BrainChoi 建议,只需检查第一线解决方案。

 static bool IsYAML(string path)
    {
        if(!File.Exists(path))
        {
            return false;
        }

        using (StreamReader sr = new StreamReader(path))
        {
            if (sr.Peek() >= 0)
            {
                string header = sr.ReadLine();
                return header.Contains("%YAML 1.1");
            }
            else
            {
                return false;
            }
        }
    }

【讨论】:

  • 如果有例如,这可能会失败。尾随 \n\r\n ...也许您应该改用 return header.Contains("%YAML 1.1"); 甚至 var match = Regex.Match(header, "^%YAML \d\.\d"); return match.Success; 或类似的东西
猜你喜欢
  • 2021-05-07
  • 2021-11-14
  • 2013-08-07
  • 1970-01-01
  • 1970-01-01
  • 2012-10-01
  • 2017-11-04
  • 2013-01-15
  • 1970-01-01
相关资源
最近更新 更多