将文件路径保存为注册表中的子键

本文关键字:注册表 文件 路径 保存 | 更新日期: 2023-09-27 17:50:23

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

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

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

所以我想知道这是否可以,如果有任何其他字符,一个文件名可以有,但一个子键名不能有?

将文件路径保存为注册表中的子键

反斜杠是唯一不允许的字符。看这篇文章

回答你隐含的问题,这是否可以:它可能是更优雅的存储整个文件路径作为一个字符串值的关键。如果您需要在键名本身中表示文件结构,那么您的方法可能是最干净的。

我不这么认为。我没有试过,但是行不通。

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 - Form feed(字符12)
  • 'n -新行(字符10)
  • 'r -回车(字符13)
  • 't -水平制表符(字符9)
  • 'v -垂直引号(字符11)
  • 'uxxxx -十六进制值xxxx
  • 字符的Unicode转义序列
  • 'xn[n][n][n] -十六进制值为nnnn的字符的Unicode转义序列('uxxxx的可变长度版本)
  • 'Uxxxxxxxx -十六进制值为xxxxxxxx的字符的Unicode转义序列(用于生成代理)

另读Structure of the Registry

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