Удалить \"из пути, преобразованного в строку

Я запрашиваю реестр для 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 ответа

Значение = значение. Подстрока (1, значение. Длина - 2);

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

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('"')удаляет (любую непустую серию)"символы с обоих концов заданного строкового значения.

Другие вопросы по тегам