2009-06-11 24 views
105

私はこれを知っていると思っていましたが、今日私は間違っていると証明されています。Properties.Settings.Defaultはどこに保存されていますか?

VS2008、.NET 3.5およびC#を実行しています。私は、このコードを使用してそれらを読んで、デフォルト値を持つプロパティの[設定]タブにユーザー設定を追加しました:

myTextBox.Text = Properties.Settings.Default.MyStringProperty; 

そして、ユーザがオプションダイアログで値を編集した後、私はこのようにそれを保存します。

Properties.Settings.Default.MyStringProperty = myTextBox.Text; 
Properties.Settings.Default.Save(); 

私の質問は、この新しい値はどこに保存されますか?実行可能ディレクトリ内のMyApp.exe.configファイルは更新されませんが、既定値はそのまま残ります。さらに、私が知る限り、そのディレクトリ内の他のファイルはどれも更新されていません!しかし、プログラムが値を読み込んだときに変更された値を取得するので、どこかに保存されていることがわかります...

これは単なる学問ではなく、私は今朝の値を手動で編集できる必要がありました。私は変化しているものが見つからないときに自分を困惑させた。

+0

をそれは、保管場所が異なるフレームワークのバージョンやOSの間で変化する可能性があることに注意することが重要です。格納場所に対してプログラム的なものをハードコードしないでください。 –

+0

Visual Studioにいる場合は、新しいアプリケーションを開発し、AppData \ Local \ Microsoft \アプリケーション名で確認してください。 ファイル名はuser.configです。私はWindows 7にあります – JenonD

答えて

102

新しいバージョンのWindowsのポリシーでは、デフォルトではProgram Filesフォルダに読み込みアクセスを許可するように設定されています(UACで標高を求めるプロンプトが表示されない限り、別のトピックです...)。設定フォルダを​​または%userprofile%\Local Settings\Application Dataに設定して、実行しているWindowsのバージョンによって異なります。すべてのユーザーの設定を保存すると、すべてのユーザープロファイル(例:C:\users\public\appdata\local)の対応するフォルダにC:\usersまたはC:\Documents and Settingsが表示されます。それは、ファイルの検索など......%のユーザー%\ローカルの設定\アプリケーションデータ\あなたのDocuments and Settingsに

+2

また、実行可能ファイルのフォルダに終わるVisual Studioで生成された.configファイルは、デバッグにのみ使用されると考えられます。最終的なアプリケーションをパッケージングするときに、ユーザーがアプリケーションを初めて実行したときに生成されるため、この.configは含めません。 –

+10

新しいバージョン?これはWindows 2000以降のケースです。あなたが管理者として実行していたため、すぐに離れました。 –

+0

それはそうです。それは私に説明されているので、完璧な意味を持っています。なぜ私が以前に "それを"得られなかったか分かりませんが... とにかく、あなたのことは、最初の、最も完全な説明でした。 – DaveN59

0

ユーザー固有の設定は、そのアプリケーションのユーザーのApplication Dataフォルダに保存されます。 user.configファイルを探します。

私はあなたが最初に実行可能ディレクトリへの書き込みアクセス権を持っていないことが多いため、期待したことは分かりません。

-11

プロジェクトのルートフォルダの下に「プロパティ」という名前のフォルダがあり、そのフォルダの下に* .settingsファイルがあります。それが保存されます。

+6

これは間違っています。デフォルト値は、そこにユーザーが値を変更しないで格納されています.. –

+0

それはright_during developement_です。展開後、他の場所に移動します。 –

+0

私はこれを開発環境で実行していて、ファイルは変更されませんでした。それは更新されたものではなく、デフォルト値をそこに格納するだけです。 –

4

を保存する場所は、しかし、変更される可能性があり

user.configと呼ばれます。

+5

実際、ユーザー固有のプロパティの正しい環境変数は%userprofile%です。 Vistaまたは7でドキュメントと設定を指定すると、フォルダが見つからないか、見つかったフォルダにアクセス許可がありません。 – jasonh

55

あなたは、プログラムのパスを取得することができます:

using System.Configuration; // Add a reference to System.Configuration.dll 
... 
var path = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.PerUserRoamingAndLocal).FilePath; 
+1

ええと、私は、これによって返されるパスが設定によって使用されるパスではない状況を見ています。どんな洞察? –

+1

@GeorgeMauer '' Local'ではなく '' Roaming'またはおそらく 'LocalLow'を意味していますか? 'ConfigurationUserLevel'は、ローミングまたはローカルであるユーザのプロファイルに依存します。企業ではしばしばローミングしています。 –

+0

[この回答](http://stackoverflow.com/a/1804324/344541)とその下の私のコメントにリンクし、パスがどのように見えるかを示します。 –