2015-12-22 5 views
0

Я запрашивая реестра для ImagePath из службы Что возвращает это:.Remove »из пути конвертируется в строку

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

преобразовать что ToString в моей функции реестра и результат:

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

мне нужно затем создать FileInfo объект и не удается из-за недопустимых символов

Как раздеть строку обратно в «C:. \ Program Files (x86) \ App \ Ap p.exe ", поэтому я могу просто указать @string в моей инициализации FileInfo.

Легкий ответ состоит в том, чтобы не преобразовать его в строку в первую очередь, однако это изменило бы поведение моей вспомогательной функции, которая широко используется.

Код:

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.Replace. ("\" ", "");' –

+2

Где вы видите эту строку? Я предполагаю, что вы видите это в отладчике, и на самом деле не все эти обратные косые черты. Что произойдет, если вы распечатаете его на консоли? –

+2

Вам нужно разместить образец кода, который показывает проблему. –

ответ

2

Этот метод используется для удаления небезопасных символов из путей к файлам.

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

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

     return replaced; 
    } 

Если действительно генерировать опасные строки, как вы говорите, я не вижу, как вокруг него, кроме как изменить строку, удалив опасные символы.

+2

Вместо того чтобы создавать свои собственные незаконные символы, вы можете использовать 'Path.GetInvalidPathChars' – jHilscher

0

Эта проблема была решена, мне просто нужно, чтобы удалить кавычки с value.Trim ('\ "')