C# 将文件路径另存为注册表中的子项
我当前正在将文件路径保存到Windows注册表中的子项,如下所示:C# 将文件路径另存为注册表中的子项,c#,.net,vb.net,registry,character,C#,.net,Vb.net,Registry,Character,我当前正在将文件路径保存到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}", 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#定义了以下字符转义序列,请参见:
-单引号,字符文本需要\”
-双引号,字符串文本需要\”
-反斜杠\\
-Unicode字符0\0
-警报(字符7)\a
-退格(字符8)\b
-表单提要(字符12)\f
-新行(字符10)\n
-回车符(字符13)\r
-水平选项卡(字符9)\t
-垂直引号(字符11)\v
-具有十六进制值的字符的Unicode转义序列\uxxx
xxxx
-具有十六进制值的字符的Unicode转义序列\xn[n][n][n]
(可变长度版本的nnnn
)\uxxx
-具有十六进制值的字符的Unicode转义序列\uxxxxx
(用于生成代理)xxxxxxx
反斜杠是唯一不允许使用的字符
回答您关于这是否正确的隐含问题:将整个文件路径作为字符串值存储在键中可能更为优雅。如果您需要用键名本身表示文件结构,那么您的方法可能是最干净的。我的代码片段位于
vb.net
中。这就是为什么使用单个反斜杠的原因。那么,为什么是否有c 35;
标记?看起来两者几乎相同,并且可以很容易地相互转换。代码段中没有分号,因此指定它是vb.net代码。