我正在查询注册表以获取服务的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);
答案 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('\“')的引号。