2012-04-04 59 views
0
Microsoft.Win32.RegistryKey registryPath = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Testing"); 

Microsoft.Win32.RegistryKey entryKey = registryPath.OpenSubKey("Entry Point"); 

我有很多测试键,格式为:“入口点011”,“入口点123” - 所以入口点与之后的随机数。C#伯爵的注册表项存在使用部分值

我能够搜索上面的registryPath变量,并获得包含“入口点”关键字的密钥数量的计数吗?假设没有这个关键字还有其他键存在。

目前我一直在使用for循环和循环所有可能的组合来获得所有键的计数,检查键是否存在,但是由于键高达“Entry Point 9000”有一个for循环执行9000次是非常低效的。

for (int i = 0; i <= highestEntryPointValue; i++) 
{ 
    Microsoft.Win32.RegistryKey entryKey = steamApps64.OpenSubKey("Entry Point " + Convert.ToString(i)); 

    if (entryKey != null) 
    { 
     count++; 
    } 
} 

回答

1

Microsoft.Win32.RegistryKey有一个名为GetSubKeyNames()的方法,它返回一个带有名称的字符串数组。

string[] keys = registryPath.GetSubKeyNames(); 

现在你可以在琴键上环和不开徒劳注册表检查他们的名字

var subKeys = Array.FindAll(keys, key => key.Substring(0, 11) == "Entry Point")); 
int count = subKeys.Lenght; 
foreach(string s in subKeys) 
..... 
+0

我喜欢这种方法,唯一的问题是一旦我有条目的数量,我也将提取一个字符串值,其中包含的每个键我都没有提到上面。虽然作为子键名现在在一个数组中,我可以将子键名称循环到现有的键变量的末尾,并获取其中的条目...将给这个去:) – cheeseman 2012-04-04 15:49:40

2

这个例子是不是有效,因为它会计算(如为)起至9000,但如果会有什么只有3个关键入口点011,入口点123,入口点9000

一线答案

int count = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\Testing").GetSubKeyNames().Where(s => s.StartsWith("EntryPoint")).Count(); 
+0

谢谢,我结束了使用的答案组合到底到那里。 – cheeseman 2012-04-04 17:12:10