删除“”;从Path转换为字符串

本文关键字:转换 字符串 Path 删除 | 更新日期: 2023-09-27 18:27:55

我正在注册表中查询服务的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);

删除“”;从Path转换为字符串

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

public static string RemoveIllegalFilenameCharactersFrom(string unsafeString)
    {
        const string illegalCharactersClass = @"['&'<'>':/|" + "'"" + @"'?'*]";
        string replaced = Regex.Replace(unsafeString, illegalCharactersClass, "");
        return replaced;
    }

如果它真的像你说的那样生成了不安全的字符串,除了通过删除不安全的字符来修改字符串之外,我看不出其他方法。

value=value。子字符串(1,value.Length-2);

这个问题已经解决了,我只需要删除带值的引号。微调('''"')。