删除“”;从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);
我使用以下方法从文件路径中删除不安全的字符。
public static string RemoveIllegalFilenameCharactersFrom(string unsafeString)
{
const string illegalCharactersClass = @"['&'<'>':/|" + "'"" + @"'?'*]";
string replaced = Regex.Replace(unsafeString, illegalCharactersClass, "");
return replaced;
}
如果它真的像你说的那样生成了不安全的字符串,除了通过删除不安全的字符来修改字符串之外,我看不出其他方法。
value=value。子字符串(1,value.Length-2);
这个问题已经解决了,我只需要删除带值的引号。微调('''"')。