无法多次将配置保存到文件中
本文关键字:存到文件 配置 | 更新日期: 2023-09-27 18:27:40
我有一些代码,包括单元测试,试图多次保存配置文件。当我第二次尝试保存配置文件时,我得到了以下错误:
无法将配置保存到文件[FileName]
我的代码基本上是这样做的:
{
Configuration config = ConfigurationManager.OpenExeConfiguration(configName);
...change some values...
config.save();
}
然后是
{
Configuration config = ConfigurationManager.OpenExeConfiguration(configName);
...change some values in a different way...
config.save();
}
当我第二次执行config.save时,有10秒的延迟,然后我得到了错误。有人知道如何"解锁"这个文件吗?
我试图保留配置变量的实例,即"在范围内",但没有成功。
private static Configuration GetConfiguration(string configName)
{
Configuration retval;
if (_configs == null) _configs = new Dictionary<string, Configuration>();
if (_configs.TryGetValue(configName, out retval)) return retval;
retval = ConfigurationManager.OpenExeConfiguration(configName);
_configs.Add(configName, retval);
return retval;
}
然后
{
Configuration config = GetConfiguration(configName);
...change some values...
config.save();
}
连同
{
Configuration config = GetConfiguration(configName);
...change some values in a different way...
config.save();
}
Ug。我在代码的其他地方造成了问题。
我有一个这样的功能:
private bool FileHasString(string filename, string searchString)
{
string content = (new StreamReader(filename)).ReadToEnd();
return content.IndexOf(searchString) > 0;
}
我假设当流读取器离开作用域时,对文件的锁定就结束了。锁显然没有,这就是造成麻烦的原因。
这样效果要好得多。
private bool FileHasString(string filename, string searchString)
{
var sr = new StreamReader(filename);
string content = sr.ReadToEnd();
sr.Close();
return content.IndexOf(searchString) > 0;
}
谢谢你的帮助。
您能否将config
保持在这两个代码块之间的范围内,这样就不必再次加载它了?
ConfigurationManager和System.Configuration命名空间背后的逻辑实际上相当复杂,因为它生成的配置不仅仅来自一个文件,即使您特别要求EXE配置。例如,user.config可能已损坏,从而无法加载整个EXE配置。我见过这种情况发生的次数多得数不清,我所知道的最好的解决方案就是删除用户配置并重新开始。同样,user.config也可能被锁定,因为ConfigurationManager本身正在对其进行操作。