2012-04-04 42 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