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

问题描述 投票:0回答:4

我正在注册表中查询服务的 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);
c# replace tostring string-literals fileinfo
4个回答
2
投票

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

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

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

        return replaced;
    }

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


2
投票

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


0
投票

这个问题已经解决了,我只需要删除 value.Trim('\"') 的引号即可。


0
投票

"\"C:\\Program Files (x86)\\App\\App.exe\""
是以下逐字字符串常规 C# 字符串文字表示,包括封闭的
"
字符。:
"C:\Program Files (x86)\App\App.exe"

等效的逐字字符串文字表示是:

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

  • 请注意,
    @
    前缀仅适用于字符串文字;它可以按照您尝试的方式应用变量

要将此类字符串识别为文件路径,包含 " 字符的

embedded
。必须删除, 您可以使用
.Trim('"')

来做到这一点
// -> The following *verbatim value*:
//         C:\Program Files (x86)\App\App.exe
"\"C:\\Program Files (x86)\\App\\App.exe\"".Trim('"')

.Trim('"')
从给定字符串值的
两端
删除(任何非空的)"字符。

© www.soinside.com 2019 - 2024. All rights reserved.