从路径转换为字符串中删除\“

时间:2015-12-22 18:28:17

标签: c# replace tostring fileinfo

我正在查询注册表以获取服务的ImagePath。返回的是:

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

我在我的注册表函数中转换了ToString,结果是:

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

然后我需要创建一个FileInfo对象,由于非法字符而失败。

如何将字符串剥离回“C:\ Program Files(x86)\ App \ App.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);

3 个答案:

答案 0 :(得分:2)

我使用以下方法从文件路径中删除不安全的字符。

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

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

        return replaced;
    }

如果它真的像你说的那样产生不安全的字符串,除了通过删除不安全的字符来修改字符串之外,我没有看到任何方法。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

这已经解决了,我只需要删除带有value.Trim('\“')的引号。