Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么不是';是否将内容写入yaml文档?_C#_Yaml_Yamldotnet - Fatal编程技术网

C# 为什么不是';是否将内容写入yaml文档?

C# 为什么不是';是否将内容写入yaml文档?,c#,yaml,yamldotnet,C#,Yaml,Yamldotnet,我的目的是在yaml文件中编写一个项目数组,格式如下: - country: Denmark city: Copenhagen - country: Italy city: Rome 所以我写了这个方法: public static void Write(MyItem myItem) { var myFilePath = "myYamlDoc.yaml"; var yamlStream = new YamlStream(); var ya

我的目的是在yaml文件中编写一个项目数组,格式如下:

- country: Denmark
  city: Copenhagen
- country: Italy
  city: Rome
所以我写了这个方法:

public static void Write(MyItem myItem)
{
    var myFilePath = "myYamlDoc.yaml";

    var yamlStream = new YamlStream();

    var yamlNode = new YamlMappingNode
        {
            { "country", new YamlScalarNode(myItem.Country) { Style = ScalarStyle.Literal }},
            { "city", new YamlScalarNode(myItem.City) { Style = ScalarStyle.Literal }};
        var yamlDocument = new YamlDocument(yamlNode);
        yamlStream.Add(yamlDocument);
    
}
没有错误,但内容也没有写入/保存到yaml文档。。。 帮忙

稍后编辑:

public static void Write4()
        {
            var myFilePath = "myFile3.yaml";

            var items = new MyItem[]
                {
                    new MyItem()
                    {
                        Prop1= "A4786",
                        Prop2 = "Water Bucket (Filled)",
                        Prop3 = "X"
                    },
                    new MyItem()
                    {
                        Prop1= "A4786",
                        Prop2 = "Water Bucket (Filled)",
                        Prop3 = "X"
                    }
                };

            var serializer = new SerializerBuilder().Build();
            var yamlText = serializer.Serialize(items);

            var yamlStream = new YamlStream();

            using (StreamWriter writer = System.IO.File.Exists(myFilePath) ? System.IO.File.AppendText(myFilePath) : System.IO.File.CreateText(myFilePath))
            {
                writer.WriteLine(yamlText);
                yamlStream.Save(writer, false);
            }
}

像这样工作,但你认为这是一个严格的方式吗?在图书馆里他们使用发射器?为了保存,但是缺少文档,或者至少我找不到。有更好的yaml图书馆吗?为什么不直接写入yamlStream,我的意思是为什么要使用StreamWriter?

我假设您正在使用。调用的类实际上不是.NET流(它不继承
)。这相当于一个YamlDocuments收藏

因此,它永远不会将文档保存到某个地方

如果您查看第一个代码示例,您永远不会使用文件名,因此该文件永远不会保存到磁盘

在第二个示例中,由于“YamlStream”可以获取
TextWriter
派生类(在您的示例中是
StreamWriter
),并使用该类将内容保存到磁盘,因此它是有效的

然而,我将代码编写为:

using (var fileStream = new FileStream(myFilePath, FileMode.Append, FileAccess.Write))
{
    using (StreamWriter writer = new StreamWriter(fileStream))
    {
        writer.WriteLine(yamlText);
        yamlStream.Save(writer, false);
    }
}

因为它使意图更加明确(总是附加到文件中)。否则只需使用
FileMode.Create
始终覆盖文件(如果存在)。

什么是
YamlStream
?不管它是什么,你的代码中没有任何地方链接到
writer
YamlStream
,所以不管它来自哪个库,都不可能知道你的
writer
流。约翰,我错把那部分留下了,我刚刚意识到并回到这里放下它。我以前使用流将常规(不是yaml格式的)文本写入yaml文档(这很有效,但只是一个中间测试…)。所以,删除了它之后,如果我不将流与yaml关联,我不知道如何指定文档路径。。。我想直接将一个yaml节点与一个yaml文档相关联,给它一个路径,就这样。然后从一个节点扩展到一个节点数组。那么你的问题不是写文件?不过,什么是
YamlStream
?什么是YamlMappingNode?我假设您使用的是一个库,但是哪一个?是的,它是关于将一个节点(或一个节点数组)写入一个文件,这与yaml格式有关。StreamWriter没有帮助尊重yaml格式(我认为-或者我没有正确使用它)。所以您想
将yaml保存到文件中?