1

我目前正在将文件路径保存到 Windows 注册表中的子项,如下所示:

Registry.SetValue(String.Format("HKEY_CURRENT_USER\Software\MyApp\{0}\{1}\{2}\{3}", FilePath.Replace("\", "/"), x, y, z), SettingName, SettingValue)

由于 Windows 注册表不接受\子键名称中的字符,因此我将其替换为/.

所以我想知道这是否可以,是否还有文件名可以具有但子键名不能具有的任何其他字符?

4

2 回答 2

2

Backslash is the only character not allowed. See this post

To answer your implied question as to whether this is OK: it might be more elegant to store the whole file path as a string value in a key. If you have a need to represent the file structure in the key name itself then your approach is probably the cleanest.

于 2012-12-30T17:29:02.113 回答
1

我不这么认为没关系。我没有尝试过,但它无法正常工作。试试这样;

Registry.SetValue(String.Format("HKEY_CURRENT_USER\\Software\\MyApp\\{0}\\{1}\\{2}\\{3}", x, y, z), SettingName, SettingValue);

\\是一个特殊字符。例如,如果您尝试;

Console.WriteLine("\");

编译器给你一个错误。但是,如果您将其写\为输出,那么您确实喜欢;

Console.WriteLine("\\");

如您所见,这不是注册表问题。C# 定义了以下字符转义序列,请查看MSDN

  • \'- 单引号,字符文字需要
  • \"- 双引号,字符串文字需要
  • \\- 反斜杠
  • \0- Unicode 字符 0
  • \a- 警报(字符 7)
  • \b- 退格(字符 8)
  • \f- 换页(字符 12)
  • \n- 换行(字符 10)
  • \r- 回车(字符 13)
  • \t- 水平制表符(字符 9)
  • \v- 垂直引号(字符 11)
  • \uxxxx- 具有十六进制值的字符的 Unicode 转义序列xxxx
  • \xn[n][n][n]- 具有十六进制值的字符的 Unicode 转义序列nnnn(可变长度版本\uxxxx
  • \Uxxxxxxxx- 具有十六进制值的字符的 Unicode 转义序列xxxxxxxx(用于生成代理)

另请阅读Structure of the Registry

每个键都有一个由一个或多个可打印字符组成的名称。键名不区分大小写。键名不能包含反斜杠字符 (),但可以使用任何其他可打印字符。值名称和数据可以包含反斜杠字符。

于 2012-12-30T17:26:55.273 回答