如何在C#中删除Yaml文件末尾的3个点?
我正在使用YamlDotNet Nuget包在C#/.Net框架中读写Yaml文件。在写入yaml文件时,它会在文件末尾创建3个点。因为这些点是可选的,所以我不想要它们。在创建yaml文件时是否有方法排除它们? 这是我的密码如何在C#中删除Yaml文件末尾的3个点?,c#,.net,yaml,file-processing,yamldotnet,C#,.net,Yaml,File Processing,Yamldotnet,我正在使用YamlDotNet Nuget包在C#/.Net框架中读写Yaml文件。在写入yaml文件时,它会在文件末尾创建3个点。因为这些点是可选的,所以我不想要它们。在创建yaml文件时是否有方法排除它们? 这是我的密码 using YamlDotNet.RepresentationModel; var input = new StreamReader(Constants.YamlFilePath); var yaml = new YamlStream
using YamlDotNet.RepresentationModel;
var input = new StreamReader(Constants.YamlFilePath);
var yaml = new YamlStream();
yaml.Load(input);
input.Dispose();
var config = ((YamlMappingNode)yaml.Documents[0].RootNode).Children["Configuration"];
((YamlMappingNode)yaml.Documents[0].RootNode).Children["Configuration"] = new YamlMappingNode
{
{ "A1", data.A1 },
{ "A2", data.A2 },
{ "A3", data.A3 },
{ "A4", config["A4"].ToString() },
{ "A5", config["A5"].ToString() }
};
using (StreamWriter writer = new StreamWriter(Constants.YamlFilePath, false))
yaml.Save(writer);
您可以创建一个内存流,进行写操作,然后将内存流中的字节写入文件
或者,您可以创建一个流编写器,在每次调用写入时写入除最后3个字节以外的所有字节。当前
YamlStream
始终发出一个显式DocumentEnd
事件,这就是为什么要写入点。您无法更改该行为,但可以编写自己的IEmitter
以强制DocumentEnd
事件隐式:
public class NoDotsEmitter : IEmitter
{
private readonly IEmitter inner;
public NoDotsEmitter(IEmitter inner)
{
this.inner = inner;
}
public void Emit(ParsingEvent @event)
{
if (@event is DocumentEnd documentEnd)
{
inner.Emit(new DocumentEnd(true));
}
else
{
inner.Emit(@event);
}
}
}
然后可以将此类的实例传递给Save方法:
var emitter = new NoDotsEmitter(new Emitter(writer));
yaml.Save(emitter, false);
您可以在此处看到一个工作示例: