我正在注册表中查询服务的 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;
}
如果它确实像您所说的那样生成不安全的字符串,除了通过删除不安全字符来修改字符串之外,我看不到任何其他方法。
关于c# - 从转换为字符串的路径中删除\",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34422240/