Удалить \"из пути, преобразованного в строку
Я запрашиваю реестр для ImagePath службы. Что возвращает:
"C:\Program Files\App\App.exe"
Я преобразую этот ToString в мою функцию реестра, и в результате:
"\"C:\\Program Files (x86)\\App\App.exe\""
Мне нужно тогда создать FileInfo
объект и он терпит неудачу из-за недопустимых символов.
Как убрать строку обратно в "C:\Program Files (x86)\App\App.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);
4 ответа
Я использую следующий метод для удаления небезопасных символов из путей к файлам.
public static string RemoveIllegalFilenameCharactersFrom(string unsafeString)
{
const string illegalCharactersClass = @"[\&\<\>\:/|" + "\"" + @"\?\*]";
string replaced = Regex.Replace(unsafeString, illegalCharactersClass, "");
return replaced;
}
Если он действительно генерирует небезопасные строки, как вы говорите, я не вижу другого пути, кроме как изменить строку, удалив небезопасные символы.
Это было решено, мне просто нужно было удалить кавычки со значением. Трим ('\"').
"\"C:\\Program Files (x86)\\App\\App.exe\""
— это обычное строковое представление C# следующего строкового значения (т. е. необработанного содержимого без синтаксических элементов), включая включающие символы:
"C:\Program Files (x86)\App\App.exe"
Эквивалентное дословное строковое представление:
@"""C:\Program Files (x86)\App\App.exe"""
- Обратите внимание, что
@
префикс работает только со строковыми литералами ; невозможно применять переменные так, как вы пытались .
Чтобы такая строка распознавалась как путь к файлу, необходимо использовать встроенные окружающие символы. необходимо удалить, что можно сделать с помощью
// -> The following *verbatim value*:
// C:\Program Files (x86)\App\App.exe
"\"C:\\Program Files (x86)\\App\\App.exe\"".Trim('"')
.Trim('"')
удаляет (любую непустую серию)"
символы с обоих концов заданного строкового значения.