1

現在、次のようにファイルパスを Windows レジストリのサブキーに保存しています。

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

\Windows レジストリはサブキー名にchar を受け入れないため、/.

それで、これでいいのか、ファイル名には使用できるがサブキー名には使用できない他の文字があるかどうか疑問に思っていましたか?

4

2 に答える 2

2

バックスラッシュは、許可されていない唯一の文字です。この投稿を見る

これで問題ないかどうかという暗黙の質問に答えるには、ファイルパス全体を文字列値としてキーに格納する方がエレガントな場合があります。キー名自体でファイル構造を表す必要がある場合は、おそらくあなたのアプローチが最もクリーンです。

于 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- 16 進値を持つ文字の Unicode エスケープ シーケンスxxxx
  • \xn[n][n][n]- 16 進値を持つ文字の Unicode エスケープ シーケンスnnnn(の可変長バージョン\uxxxx)
  • \Uxxxxxxxx- 16 進値を持つ文字の Unicode エスケープ シーケンスxxxxxxxx(サロゲートの生成用)

また読むStructure of the Registry

各キーには、1 つ以上の印刷可能な文字で構成される名前があります。キー名は大文字と小文字が区別されません。キー名にバックスラッシュ文字 () を含めることはできませんが、その他の印刷可能な文字は使用できます。値の名前とデータにはバックスラッシュ文字を含めることができます。

于 2012-12-30T17:26:55.273 に答える