1

今天我遇到了一个以前从未遇到过的问题。我正在尝试从 Windows 注册表中的值检查文件是否存在。更具体地说,我从 Flight Simulator 获取安装路径并检查是否安装了模块。

我得到注册表项就好了,它被转换为一个字符串(从一个对象),但我似乎无法在它之后连接文件名(之前很好)。

RegistryKey pRegKey = Registry.CurrentUser;
pRegKey = pRegKey.OpenSubKey(@"Software\Microsoft\Microsoft Games\Flight Simulator\10.0");
string fSPath = pRegKey.GetValue("AppPath").ToString(); // Receives "S:/Apps/FSX/"

如果我显示这样的消息框,它不会连接:

MessageBox.Show(fSPath + "Modules");
4

2 回答 2

3

尝试其他重载方法GetValue

GetValue Method (String, Object)
GetValue Method (String, Object, RegistryValueOptions)

并使用RegistryKey.GetValueKind方法获取与指定名称关联的值的注册表数据类型。

我们有三种用于字符串的注册表数据类型:

String以 null 结尾的字符串。此值等效于Win32 API注册表数据类型REG_SZ

ExpandString一个以 null 结尾的字符串,其中包含对环境变量的未扩展引用,例如%PATH%,在检索值时会扩展这些引用。此值等效于Win32 API注册表数据类型REG_EXPAND_SZ

MultiString 一个以空字符结尾的字符串数组,以两个空字符结尾。此值等效于Win32 API注册表数据类型REG_MULTI_SZ

于 2013-01-05T12:04:42.553 回答
2

添加以下行:

string fSPath = fsPath.Replace("\0","");

在使用消息框之前。

于 2013-01-05T11:48:00.103 回答