Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将文件路径另存为注册表中的子项_C#_.net_Vb.net_Registry_Character - Fatal编程技术网

C# 将文件路径另存为注册表中的子项

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注册表不接受子项名称中的字符\,因此我将其替换为/ 所以我想知道这是否可以,文件名是否可以有其他字符,但子键名不能

我当前正在将文件路径保存到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#定义了以下字符转义序列,请参见:

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

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


反斜杠是唯一不允许使用的字符


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

我的代码片段位于
vb.net
中。这就是为什么使用单个反斜杠的原因。那么,为什么是否有
c 35;
标记?看起来两者几乎相同,并且可以很容易地相互转换。代码段中没有分号,因此指定它是vb.net代码。