c#清除注册表文件.reg以删除重复项
我工作的一家公司有时会对他们的用户使用超级强制配置文件。不幸的是,这会导致很多问题,比如用户设置在注销时无法保存等等。为了解决这个问题,在启动时运行.reg文件。对于其中一些设置,regmon用于记录设置的更改,并由此创建一个reg文件。这样做的问题是他们有很多重复的条目,每次这样做都会使它越来越大顺便说一句,我没有实施这个过程,我只能接受它。 我将试图把它清理到最低限度,但我想知道是否有人这样做过。我的想法是,我将线读入2d数组,因此: [HKEY\U CURRENT\U USER\Software\CELCAT\CT\SAT\Settings]c#清除注册表文件.reg以删除重复项,c#,registry,C#,Registry,我工作的一家公司有时会对他们的用户使用超级强制配置文件。不幸的是,这会导致很多问题,比如用户设置在注销时无法保存等等。为了解决这个问题,在启动时运行.reg文件。对于其中一些设置,regmon用于记录设置的更改,并由此创建一个reg文件。这样做的问题是他们有很多重复的条目,每次这样做都会使它越来越大顺便说一句,我没有实施这个过程,我只能接受它。 我将试图把它清理到最低限度,但我想知道是否有人这样做过。我的想法是,我将线读入2d数组,因此: [HKEY\U CURRENT\U USER\Softw
“OpenTTVS”=“0”
“OTTFrmW”=“420”
“OTTFrmH”=“321”
变成:
[HKEY\U CURRENT\U USER\Software\CELCAT\CT\SAT\Settings],“OpenTTVS”=“0” [HKEY\U CURRENT\U USER\Software\CELCAT\CT\SAT\Settings],“OTTFrmW”=“420” [HKEY\U CURRENT\U USER\Software\CELCAT\CT\SAT\Settings],“OTTFrmH”=“321” 然后按相反的顺序删除重复项,这样,如果设置更改两次,它会首先删除文件中的条目 然后按配置单元对数组进行排序,并在每次更改时输出键和配置单元。如果术语有误,很抱歉
这样行吗?使用集合可能比使用数组更好,但你明白了。你可以使用字典字典。在伪代码中,您可以执行如下操作:
Dictionary<String, Dictionary<String, String>> regSettings
Dictionary<String, String> current
for line in sourcefile {
if line.startswith("[") {
if !regSettings.haskey(line) {
regSettings.add(line, new Dictionary<String, String>() )
}
current = regSettings[line]
} else {
key, value = line.split("=")
current[key] = value;
}
}
字典设置
字典电流
对于源文件中的行{
if line.startswith(“[”){
if!regSettings.haskey(行){
添加(行,新字典())
}
当前=注册表设置[行]
}否则{
键,值=行。拆分(“”)
当前[键]=值;
}
}
有一些细节需要解释(空行、注释、记忆不好的函数名,应该根据C#…)进行调整),但这是基本思想。当您遇到重复设置时,后面的值将替换集合中较旧的值。要写入文件,只需输出reg头,然后迭代集合,写入顶级键名,后跟该键的所有值。您可以使用字典字典。在伪代码中,然后,您可以这样做:
Dictionary<String, Dictionary<String, String>> regSettings
Dictionary<String, String> current
for line in sourcefile {
if line.startswith("[") {
if !regSettings.haskey(line) {
regSettings.add(line, new Dictionary<String, String>() )
}
current = regSettings[line]
} else {
key, value = line.split("=")
current[key] = value;
}
}
字典设置
字典电流
对于源文件中的行{
if line.startswith(“[”){
if!regSettings.haskey(行){
添加(行,新字典())
}
当前=注册表设置[行]
}否则{
键,值=行。拆分(“”)
当前[键]=值;
}
}
有一些细节需要解释(空行、注释、记忆不好的函数名,应该根据C#…)进行调整),但这是最基本的想法。当您遇到重复设置时,后面的值将替换集合中较旧的值。要写入文件,只需输出reg头,然后迭代集合,写入顶级密钥名称,后跟该密钥的所有值。第一次尝试时,我会将此.reg文件读入树中,只需regedit的样子。通过构建树,您只需检查节点是否存在。如果不存在,则创建该节点,否则将覆盖现有值 因此,您将只获得生效的最后一个条目。创建此树后,您必须读回当前树,然后您就准备好了 在写这篇文章时,我有另一个想法: 在文本编辑器中打开.reg文件。将“[HKEY_CURRENT_USER\”替换为“[HKEY_CURRENT_USER\JustSomeKeythatNoTexists”并将此文件导入注册表。现在打开注册表并将整个“[HKEY_CURRENT_USER\JustSomeKeythatNoTexists”导出回文件。打开该文件并向后进行第一次替换
现在您将拥有一个按排序顺序具有唯一值的文件。;-)第一次尝试时,我会将此.reg文件读入一个树中,就像regedit看起来的那样。通过构建树,您只需检查节点是否存在。如果不存在,则创建它,否则将覆盖现有值 因此,您将只获得生效的最后一个条目。创建此树后,您必须读回当前树,然后您就准备好了 在写这篇文章时,我有另一个想法: 在文本编辑器中打开.reg文件。将“[HKEY_CURRENT_USER\”替换为“[HKEY_CURRENT_USER\JustSomeKeythatNoTexists”并将此文件导入注册表。现在打开注册表并将整个“[HKEY_CURRENT_USER\JustSomeKeythatNoTexists”导出回文件。打开该文件并向后进行第一次替换
现在,您将拥有一个按排序顺序排列的具有唯一值的文件。;-)就像您的第二个想法非常好,它尝试了,而且效果很好。就像您的第二个想法非常好,它尝试了,并且效果很好。