2015-12-22 58 views
0

我查詢服務的ImagePath的註冊表什麼返回是:刪除」從路徑轉換成字符串

"C:\Program Files\App\App.exe" 

我轉換是的ToString在我的註冊表函數,其結果是:

"\"C:\\Program Files (x86)\\App\App.exe\"" 

我需要再創建一個FileInfo對象,它是由於非法字符失敗

如何剝離串回落到「C:\ Program Files文件(x86)的\軟件\鴨p.exe「,這樣我就可以簡單地在我的初始化狀態FileInfo中聲明@string。

最簡單的答案是不首先將其轉換爲字符串,但是這會改變我廣泛使用的輔助函數的行爲。

代碼:

public static String getRegistryKeyValue(RegistryHive hiveType, String key, String value) 
    { 
     RegistryKey registryKey; 
     if (Environment.Is64BitOperatingSystem == true) 
      registryKey = RegistryKey.OpenBaseKey(hiveType, RegistryView.Registry64); 
     else 
      registryKey = RegistryKey.OpenBaseKey(hiveType, RegistryView.Registry32); 

     RegistryKey keyToRead = registryKey.OpenSubKey(key); 

     String data = ""; 
     try 
     { 
      data = keyToRead.GetValue(value).ToString(); 
     } 
     catch (Exception) 
     { 
      logger.Error("Unable to get key: " + key + " for value: " + value); 
     } 
     logger.Info("Getting registry data for: " + key + " with value: " + value + " is: " + data); 
     return data; 
    } 

當我調用該方法並初始化DirectoryInfo中,它拋出一個異常「路徑中具有非法字符」。使用@或者沒有導致相同的異常。

DirectoryInfo exe = new DirectoryInfo(@exePath); 
+1

'X = x.Replace。( 」\「」, 「」)與value.Trim除去報價;' –

+2

在哪裏你看到那個字符串?我的猜測是你在調試器中看到它,並且它並不真正包含所有反斜槓。如果將它打印到控制檯上會發生什麼? –

+2

您需要發佈顯示問題的示例代碼。 –

回答

1

value = value.Substring(1,value.Length - 2);

2

我使用以下方法從文件路徑中刪除不安全的字符。

public static string RemoveIllegalFilenameCharactersFrom(string unsafeString) 
    { 
     const string illegalCharactersClass = @"[\&\<\>\:/|" + "\"" + @"\?\*]"; 

     string replaced = Regex.Replace(unsafeString, illegalCharactersClass, ""); 

     return replaced; 
    } 

如果真的產生不安全的串像你說的,我沒有看到它周圍的其他比任何方式通過消除不安全的字符來修改字符串。

+2

你可以使用'Path.GetInvalidPathChars'來代替構建自己的非法字符, – jHilscher

0

這已經解決了,我只是需要( '\'「)