2013-01-05 39 views
1

今天我遇到了一個我從未有過的問題。我試圖從Windows註冊表中檢查一個文件是否存在。更具體地說,我從Flight Simulator獲取安裝路徑並檢查是否安裝了模塊。C#:字符串連接不起作用

我得到的註冊表鍵很好,它被轉換爲一個字符串(從一個對象),但我似乎無法連接後它的文件名(以前是很好)。

RegistryKey pRegKey = Registry.CurrentUser; 
pRegKey = pRegKey.OpenSubKey(@"Software\Microsoft\Microsoft Games\Flight Simulator\10.0"); 
string fSPath = pRegKey.GetValue("AppPath").ToString(); // Receives "S:/Apps/FSX/" 

如果我表現出這樣一個消息不串連:

MessageBox.Show(fSPath + "Modules"); 
+0

爲了記錄,我嘗試使用StringBuilder並顯式轉換兩個文本部分。 – henriquesirot

+7

缺少的部分是「你會得到什麼」。它沒有連接,但它有什麼作用?消息框中顯示了什麼? –

+0

是否有例外或字符串結果只是「模塊」 –

回答

2

添加以下行:

string fSPath = fsPath.Replace("\0",""); 

使用的MessageBox之前。

+0

這樣做!哇謝謝!這個\ 0如何出現,但沒有顯示? – henriquesirot

+0

RegistryKey是一個相當古老的類。我不知道它寫的可能是c或C++。這些語言使用\ 0來告訴字符串的末尾在哪裏。並且因爲它標誌着它不被顯示。 – CSharpie

+0

可能想要使用Registry類。 – CSharpie

3

嘗試的GetValue其他重載方法:

GetValue Method (String, Object) 
GetValue Method (String, Object, RegistryValueOptions) 

,並使用RegistryKey.GetValueKind方法來獲取與指定名稱關聯的值的註冊表數據類型。

我們有three registry data types爲字符串:

String甲空終止string.This值相當於Win32 API註冊表數據類型REG_SZ

ExpandString包含對環境變量,未膨脹的引用如%PATH%,當值被檢索一個擴展一個空終止字符串。該值相當於Win32 API註冊表數據類型REG_EXPAND_SZ

MultiString空終止字符串數組,由兩個空字符結束。該值相當於Win32 API註冊表數據類型REG_MULTI_SZ