42

私は小さなC#Winformsゲームを開発していますが、私がやりたいことの1つは、アプリケーション固有のデータを保存することです。ただし、これを保存する正しい場所を理解するのに少し苦労しています。

私が見る限り、アプリケーションが保存する可能性のあるデータにはいくつかの種類があり、それに応じて、アプリケーションを保持する場所が異なります。

1.アプリケーションのプロパティ -アプリケーションがデータを保存する場所、最後にログインしたユーザーが誰であるか、デフォルトのウィンドウサイズ、位置などの設定。この情報はapp.settingsに入るのか、それともレジストリに入るのか。

2.グローバルアプリケーションデータ -これには、このマシンでアプリケーションを実行するすべてのユーザーが使用するスプライトやその他のゲームアセットが含まれる場合があります。この共通データはどこに保存されますか?私の特定のケースでは、このデータはデフォルトのインストールでは提供されず、ユーザーは自分のゲームアセットを追加できるようになり、同じコンピューター上の他のユーザーが利用できるようになることに注意してください。

3.ユーザー固有のアプリケーションデータ -これには、ユーザーが保存したゲームファイル、特定のアプリケーション設定、およびプロファイル情報が含まれます。これはどこに保管すればいいですか?

理想的には、アプリケーションがWindows XP、Vista、7、そしてもちろん今後のWindows 8と互換性があることを望みます。これによって方法が変わるかどうかはわかりませんが、アドバイスを提供するのに役立つことを願っています。

これは、この種の開発への私の最初の進出であり、いくつかの「ベストプラクティス」のアドバイスをいただければ幸いです。

4

3 に答える 3

40

質問2:
でサブフォルダーを使用することをお勧めします(デフォルトではWindows7にEnvironment.SpecialFolder.CommonAppDataマップされます)。C:\ProgramDataこれは隠しフォルダです。

質問3:ユーザーがそれらのファイルをバックアップ/変更するつもりがないことが予想される場合は、
それらのファイルをEnvironment.SpecialFolder.AppData(デフォルトでは隠しフォルダーにマップします)に配置します。C:\Users\[USERNAME]\AppData\Roaming一部のゲームでは、セーブゲームをに入れていますEnvironment.SpecialFolder.MyDocuments。これは、おそらくユーザーがセーブゲームを見つけやすいためです。

コード例:

var directory = Environment.GetFolderPath(Environment.SpecialFolder.AppData);


using (FileStream fs = File.Create(Path.Combine(directory, "myAppDirectory", "myFile.txt")))
{
    // write data               
}

Windowsの特別なフォルダの完全なリストについては、リンクをたどってください

サイドノート

于 2012-05-12T11:13:08.230 に答える
7

アプリケーションのプロパティ-説明するほとんどのアプリケーションデータは、各ユーザーに固有であり、Environment.SpecialFolder.ApplicationData%appdata%環境変数)に入力する必要があります。見つけたり、編集したり、修正したりするのは難しいので、私は通常、レジストリにデータを入れることを避けます。ユーザーがローミングしているときにデータをユーザーに関連付けたくない場合(ファイルが大きいか、何らかの方法でコンピューターに接続されている可能性があります)、データをEnvironement.SpecialFolder.LocalApplicationData( `%localappdata%環境変数)に入れることができます。

グローバルアプリケーションデータ-グローバルアプリケーションデータをEnvironment.SpecialFolder.CommonApplicationData%programdata%環境変数)に入れます

ユーザー固有のアプリケーションデータ-#1と同じですが、データがユーザーによって簡単に見つけられるようになっている場合(たとえば、保存されたゲーム)、Environment.SpecialFolder.MyDocuments関連する環境変数を持たないデータを入力する必要があります。

yas4891が指摘しているように、ここにリストされているEnvironment.SpecialFolder`値Environment.GetFolderPath()のいずれかを使用して、これらのフォルダーパスを確実に取得できます。

于 2019-01-20T21:15:25.223 に答える
-8

データをオブジェクトに保存してファイルに書き込んでみませんか。タイプごとに異なるファイルを使用します。

于 2012-05-12T11:14:46.470 に答える