2009-07-24 12 views
0

私が働いている会社は、時にはそのユーザーにスーパー必須プロファイルを使用します。残念ながら、これは、ログオフ時に保存されないユーザー設定で多くの問題を引き起こす可能性があります。この問題を回避するには、.regファイルが起動時に実行されます。これらの設定のいくつかについては、regmonが設定の変更を記録し、これから作成されたregファイルを記録しました。これが問題になるのは、重複したエントリがたくさんあるため、これが行われるたびに大きくなり、大きくなります。 私はこの手順を実装していないように、私はちょうどそれと一緒に暮らさなければなりません。c#重複したエントリを削除するためにレジストリファイル.regを消去する

私はこれを最小限に抑えるようにしようとしていますが、これまでに誰かがこれをしていたのか不思議です。

[HKEY_CURRENT_USER \ SOFTWARE \ CELCAT \ CT \ SAT \設定]
"OpenTTVS" = "0"
"OTTFrmW" = "420:私は考えています何を、私は2次元配列にラインを読んで"
"OTTFrmH"=" 321"

は、次のようになります。
[HKEY_CURRENT_USER \ SOFTWARE \ CELCAT \ CT \ SAT \設定]、 "OpenTTVS" = "0" [HKEY_CURRENT_USER \ SOFTWARE \ CELCAT \ CT \ SAT \ Settings]、 "OTTFrmW" = "420" [HKEY_CURRENT_USER \ Software \ CELCAT \ CT \ SAT \ Settings]、 "OTTFrmH" = "321"

次に、重複を逆の順序で削除します。そのため、設定が2回変更されると、ファイル内のエントリが最初に削除されます。

次に、ハイブで配列をソートし、毎回キーを出力し、ハイブを変更したときに出力します。用語が間違っている場合は、ごめんなさい。

これは機能しますか?おそらく配列ではなくコレクションを使うほうが良いでしょうが、あなたはそのアイデアを得ます。

答えて

2

最初の試みでは、この.regファイルをツリーに読み込み、regeditのように見えます。ツリーを構築することによって、ノードが存在するかどうかを確認するだけです。そうでない場合は、既存の値を上書きします。

これで最後のエントリが有効になります。このツリーを作成したら、現在のツリーを読み返す必要があります。

これを書いている間、別のアイデアがあります: テキストエディタで.regファイルを開きます。 "[HKEY_CURRENT_USER \"を "[HKEY_CURRENT_USER \ JustSomeKeyThatDoesNotExists"に置き換え、このファイルをレジストリにインポートします。レジストリを開き、 "[HKEY_CURRENT_USER \ JustSomeKeyThatDoesNotExists"全体をファイルに戻します。ファイルを開き、最初の置換えを後ろ向きにします。

これで、ソート順に一意の値を持つファイルが作成されます。 ;-))

+0

2番目のアイデアが本当にうまくいっていて、うまくいきました。 – PeteT

2

ディクショナリの辞書を使用できます。擬似コードでは、あなたは、このような何か行うことができます:

Dictionary<String, Dictionary<String, String>> regSettings 
Dictionary<String, String> current 
for line in sourcefile { 
    if line.startswith("[") { 
     if !regSettings.haskey(line) { 
      regSettings.add(line, new Dictionary<String, String>()) 
     } 
     current = regSettings[line] 
    } else { 
     key, value = line.split("=") 
     current[key] = value; 
    } 
} 

を(C#...のために調整する必要があり、空白行、コメント、不十分思い出し関数名)を考慮するためにいくつかの詳細がありますが、それはです基本的な考え。重複した設定を見つけると、後の値がコレクション内の古い値を置き換えます。ファイルを書き込むには、regヘッダーを出力し、コレクションを繰り返し、最上位のキー名を書き、そのキーのすべての値を入力するだけです。

関連する問題