C# 保存现有文件:删除空值属性
我有这样一个配置文件:C# 保存现有文件:删除空值属性,c#,save,config,C#,Save,Config,我有这样一个配置文件: <?xml version="1.0" encoding="utf-8"?> <configuration> <appSettings> <add key="key1" value="value1" /> <add key="key2" value="" /> ... </appSettings> ... </configuration> 在此
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="key1" value="value1" />
<add key="key2" value="" />
...
</appSettings>
...
</configuration>
在此之后,我得到以下结果:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="key1" value="newvalue1" />
<add key="key2"/>
...
</appSettings>
...
</configuration>
,则不会删除该属性。但我想知道为什么在第一个案例中它被移除了
谢谢
第二条评论的第二次编辑: 那么,你还没有提供足够的信息。我所有的答案都回答了你的问题。第一个答案中的两个值在功能上是等效的。因此,如果您希望查看“key2”值是否为=”,那么您可以简单地运行以下命令
if(appConfig.AppSettings.Settings["key2"] == null){
//If this hits, that means <add key="key2" value="" />
}
if(appConfig.AppSettings.Settings[“key2”]==null){
//如果这个击中了,那意味着
}
请研究如何提出一个好问题,并调整您的问题以反映您真正想问的问题。谢谢,但我们通过将配置文件的值属性读取为xml来检查配置文件的另一部分,因此我们需要带空字符串的值属性谢谢更新。但是不可能将key2更新为空字符串。这是一个更新程序,用于更新配置文件的某些属性。@WernerKellens您的问题现在已经回答了3次。请更新您的问题以反映您真正想知道的内容,或将此标记为已接受,然后提出一个单独的问题。问题是,当我们调用save with ConfigurationSaveMode.Minimal(文档:仅导致将与继承值不同的属性写入配置文件)时,为什么会将其删除并且不会随ConfigurationSaveMode.Modified一起删除(文档:仅导致修改的属性写入配置文件,即使该值与继承的值相同)?阅读了Minimal的文档后,我认为他不应该更新key2,因为这个值没有更改。@WernerKellens最小保存模式会因为一个名为“短路”的编程属性而导致空值字符串被覆盖。在该方法解析您的配置并看到它是空值之后,它会以尽可能最小的方式更改配置。
appConfig.Save(ConfigurationSaveMode.Modified);
<add key="key2" value="" />
<add key="key2" />
System.Configuration.Configuration appConfig = ConfigurationManager.OpenExeConfiguration(Configuration.ConfigFile.Replace(".config", string.Empty));
appConfig.AppSettings.Settings["key1"].Value = "newvalue1";
appConfig.AppSettings.Settings["key2"].Value = "";
appConfig.Save(ConfigurationSaveMode.Minimal);
if(appConfig.AppSettings.Settings["key2"] == null){
//If this hits, that means <add key="key2" value="" />
}