C# 如何检查资产文件是YAML格式还是二进制格式?我是不是换了';直接使用什么格式?

C# 如何检查资产文件是YAML格式还是二进制格式?我是不是换了';直接使用什么格式?,c#,unity3d,yaml,C#,Unity3d,Yaml,出于某种原因,我需要编辑xxx.preafb文件,但Unity.prefact文件有两种格式,二进制或YAML 那么,我如何才能检测到xxx.prefact是一种YAML格式或binary。如果我检测到这个文件是二进制格式的,我怎么能把它切换到YAML。 我知道编辑器>资产序列化>模式它可以格式化项目的所有资产,但它改变太多…由@braincoi建议,只需检查第一行解决方案 static bool IsYAML(string path) { if(!File.Exist

出于某种原因,我需要编辑xxx.preafb文件,但Unity
.prefact
文件有两种格式,二进制或YAML 那么,我如何才能检测到
xxx.prefact
是一种
YAML
格式或
binary
。如果我检测到这个文件是二进制格式的,我怎么能把它切换到
YAML

我知道编辑器>资产序列化>模式它可以格式化项目的所有资产,但它改变太多…

由@braincoi建议,只需检查第一行解决方案

 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;
            }
        }
    }

使用按YAML格式序列化的预置如何,当您打开“YAML”文件时,它的头类似于“%YAML 1.1”,所以如果“*.prefact”文件没有yaml头,则可以将其转换为二进制文件,否则在读取预制文件的第一行时,它将是yaml fileSo,并且包含“%yaml x.x”,否则它将是yaml格式binary@BrianChoi好主意!例如,如果存在尾随的
\n
\r\n
。。。也许您应该使用
返回头.Contains(“%YAML 1.1”)相反,甚至
var match=Regex.match(标题“^%YAML\d\。\d”);回归比赛。成功或类似的东西