ゲームの保存ファイル/データを書き込むディレクトリは?


37

ゲームの保存ファイルや他のゲーム生成データを保存する場所の、プラットフォームごとに1つ以上のディレクトリの明確なリストが必要です。OS開発者の仕様に基づいているか、推奨事項がない場合は一般的な使用方法であるため。

プラットフォームごとに1つの回答を、異なるディレクトリで提供してください。また、C ++またはCでディレクトリの場所を取得する方法の例が最適です。これは、あなたがより苦労する言語だからです。

場所:

  • プレイヤーのゲームデータ(保存されたゲーム、設定)。
  • 共有ゲームデータ(すべてのコンピューターユーザーのハイスコアや構成など)。
  • 一時的なゲームデータ(キャッシュディレクトリ)。

1
おそらく、すべての答えを1つにまとめる必要があります。受け入れられる答えは1つではないからです。
ゾロモン

@Zolomon問題は、すべてのプラットフォームで1つの答えが大きすぎると思うことです。特に、モバイル/タブレットプラットフォームを追加する場合
...-クライム

(この意見を共有する人がもっといる可能性があるので)少なくとも、ゲームが敬意のある(インストール)ディレクトリに保存されない場合は嫌いであることに注意する価値があります。ゲーム内のユーザーがゲーム内で作成されるゲームが好きで、これ以上の隠蔽は必要ありません。ゲームに使用するPCは、OSユーザーを使用するのに十分なマルチユーザーではありません。または、それを使用する必要がある場合、私は内部でそれを行うゲームが好きです。そうではないかもしれませんが、1人のOSユーザー= 1人のゲームユーザーalteregoのアイデアも悲惨です。私はWindowsゲーマーです。* unixでは異なり、固定FSにより概念が強制されます(ドライブはありません)
-n611x007

@naxaそれがあなたを「慰める」ことができるなら、私は内部にプレイヤーアカウント管理を持つゲームを作っていますが、プレイヤーアカウントはOSセキュリティ上の理由でユーザーのアカウントに保存されなければなりません。共有リポジトリにも保存するかもしれませんが、わかりません。また、ある時点でユーザーがデータをオンラインに維持できるようにする必要があります。
クライム

3
@naxa問題は、Vista、Windows7、Windows8では、管理者として特に実行しない限り、プログラムがProgram Files \ Game-Install-Dir \に書き込めないことです。これは最近のLinuxおよびOSXバージョンでも当てはまると思います。
ネイト

回答:


23

Windows(Xp以降)

に基づく:

これらの場所は、WindowsがC:ディスクにインストールされていることを前提としています。独自のディレクトリにゲーム名またはゲーム会社を追加してから、これらのディレクトリにゲーム名を追加します。


Window 8 Metroスタイルのアプリケーションを使用する場合、ディレクトリにアクセスする代わりに特定のAPIを使用する必要があります。読む:


プレイヤーのゲームデータ

Windows Vista以降:

C:\ Users \ {ユーザー名} \ AppData \ Roaming

Windows XP:

C:\ Documents and Settings \ {username} \ Application Data

APPDATA環境変数を取得することにより、適切なユーザー名依存アドレスを自動的に取得できます

標準C(すべてのコンパイラ):

char* appdata = getenv("APPDATA");

Visual Studio 20xx(安全ではないと言っているgetenv()警告を避ける)-非Metroスタイル:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "APPDATA" ); 

Boost users:現時点では、boost.filesystem(これは次のC ++標準に提案されているファイルシステムライブラリのドラフトでもあります)を作成しますが、正しいディレクトリを提供する機能はまだ実装されていません。ただし、これについては以前に議論されています。状況が変わった場合は、このセクションを自由に更新してください。


共有ゲームデータ

Windows Vista以降:

C:\ ProgramData

Windows XP:

C:\ Documents and Settings \ All Users

PROGRAMDATA環境変数を取得することにより、自動的に正しいアドレスを取得できます

標準C(すべてのコンパイラ):

char* appdata = getenv("PROGRAMDATA");

Visual Studio 20xx(安全ではないと言っているgetenv()警告を避ける)-非Metroスタイル:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "PROGRAMDATA" ); 

Boost users:現時点では、boost.filesystem(これは次のC ++標準に提案されているファイルシステムライブラリのドラフトでもあります)を作成しますが、正しいディレクトリを提供する機能はまだ実装されていません。ただし、これについては以前に議論されています。状況が変わった場合は、このセクションを自由に更新してください。


一時的なゲームデータ

Windows Vista以降:

C:\ ProgramData

Windows XP:

C:\ Documents and Settings \ {ユーザー名} \ Local Settings \ Temp

TEMP環境変数を取得することにより、自動的に正しいアドレスを取得できます

C ++ Boostユーザーシンプルなクロスプラットフォームのboost.filesystem関数があります

namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional

標準C(すべてのコンパイラ):

char* appdata = getenv("TEMP");

Visual Studio 20xx(安全ではないと言っているgetenv()警告を避ける)-非Metroスタイル:

char *pValue;
size_t len;
errno_t err = _dupenv_s( &pValue, &len, "TEMP" ); 

4
Vista以降では、ゲームの保存は特別な「保存されたゲーム」フォルダに配置するのが望ましいでしょう。詳細はこちら:msdn.microsoft.com/en-us/library/windows/desktop/…「FOLDERID_SavedGames」を探してください
-Durza007

1
実際に自分でパスを推測したり、環境変数からパスを構築したりしないでください。Vista以降では、SHGetKnownFolderPath(msdn.microsoft.com/en-us/library/bb762188.aspx)を呼び出し、XP以下ではSHGetFolderPath(msdn.microsoft.com/en-us/library/bb762181.aspx)を使用する必要があります。
キロタン

@KylotanとDurza007、私は少し時間が足りません。必要に応じてこの回答を自由に編集してください。この回答コミュニティWikiを作成しました。
クライム

SHGetFolderPathは新しいメソッドの単なるラッパーであり、下位互換性のためにのみサポートされているため、msdnのドキュメントではSHGetKnownFolderPathの使用が推奨されていると言うことが重要だと思います。
影武者

16

マックOS

に基づく:

UNIXベースのOSでは、~ディレクトリはユーザー固有のデータがあるユーザーのホームディレクトリに自動的に配置されます。つまり、これらのプラットフォームでは、言語に関係~なく、OS固有の機能を使用する代わりに使用して、このフォルダーに自動的にアクセスできます。また/、これはシステム全体のルートパスであり、メインディスクのルートへのパスではないことに注意してください。

独自のディレクトリにゲーム名またはゲーム会社を追加してから、これらのディレクトリにゲーム名を追加します。


プレイヤーのゲームデータ

Appleのガイドラインは、保存ファイルと設定ファイルを見つけて、可能であればクラウドに自動的に保存することです。

〜/ドキュメント

ただし、次の場所にこれらのファイルを配置することをお勧めします(より頻繁に使用されます)。

〜/ライブラリ/ Application Support /

この場合、ファイルはクラウドに自動的に保存されないことに注意してください。プレーヤーに選択させる場合は、プラットフォームのAPIを使用して選択させます。

共有ゲームデータ

/ライブラリ/ Application Support

が存在しないことに注意してください。これは~、ユーザーの自宅からではなく、システムのルートからの相対的なものです。

一時的なゲームデータ:

実行間でデータを保持する必要がない場合:

/ tmp

実行間でデータを保持する必要がある場合;

/ Library / Caches(MacOSXの場合)

C ++ Boostユーザーシンプルなクロスプラットフォームのboost.filesystem関数があります

namespace bfs = boost::filesystem;
const bfs::path TEMP_DIR = bfs::system_complete( bfs::temp_directory_path() ); // system_complete() call is optional

4
何も置かないでください~/Documents。これは、ユーザーが整理することを選択するためのものです。Documents内の固定パスに書き込むべきではありません。ゲームは~/Library/Application Support/Your App Name/、保存やその他のユーザーデータに使用する必要があります。
ケビンリード

@KevinReid "ユーザーが作成してアプリのユーザーインターフェイスに表示するドキュメント。たとえば、Pages、Numbers、KeynoteのドキュメントブラウザはDocumentsディレクトリに保存する必要があります。Documentsディレクトリに移動するファイルの別の例は、繰り返しますが、それはアプリが何らかの選択方法を提供する可能性があるからです。」-出典:Appleの推奨、最初のリンク。私は何か見落としてますか?
クライム

2
それらのすべてにおいて、強調は選択にあります。ユーザーは、自分の名前と移動先を選択します。Documentsは開発者ではなくユーザーの名前空間であるため、ユーザーが管理しないファイルはDocumentsに配置しないでください。(免責事項:私のアドバイスはAppleのドキュメントと一致しているとは主張していません。Mac用に設計されたアプリケーションの大部分のプラクティスを反映しており、ユーザーはより満足していると主張しています。)
Kevin Reid

また、X以前のMac OSには「ライブラリ」ディレクトリがありませんでした。リンクされたドキュメントの「(OS X)」のコメントは、iOSとは対照的です。iOSはユーザーにファイルシステムを公開しないため、まったく異なる質問です。
ケビンリード

@KevinReidライブラリのものを更新します、ありがとう。ただし、選択とドキュメントについてあなたが言うことについては、これは矛盾しているように思われます。セーブゲームはユーザーに相対的であり、アプリケーションや開発者に相対的ではありません。まあ、それはゲームに依存するため、共有ゲームデータディレクトリも存在します。ですから、あなたが何を言っているのか正確にはわかりません。それについてどこか合理的ですか?
クライム

13

Linux Debian(Ubuntu、Fedoraなど)

に基づく:

UNIXベースのOSでは、〜ディレクトリは、ユーザー固有のデータがあるユーザーのホームディレクトリに自動的に配置されます。つまり、これらのプラットフォームでは、言語に関係なく、OS固有の関数を使用する代わりに〜を使用してこのフォルダーに自動的にアクセスできます。また、/はシステム全体のルートパスであり、メインディスクのルートへのパスではないことに注意してください。

独自のディレクトリにゲーム名またはゲーム会社を追加してから、これらのディレクトリにゲーム名を追加します。


プレイヤーのゲームデータ

従来、ゲームAquariaの場合:

〜/ .aquaria

で始まるディレクトリとファイルは.、デフォルトではユーザーに非表示になることに注意してください。

ほとんどのデスクトップは今に準拠してみてくださいXDG仕様推奨しています、

$ XDG_CONFIG_HOME / aquaria

または

$ XDG_DATA_HOME / aquaria

代わりに設定およびセーブゲーム用。

$XDG_CONFIG_HOME設定されていない場合:

〜/ .config / aquaria

または

〜/ .local / aquaria

これは主に、ユーザーのホームディレクトリを整理し、必要に応じてユーザーがアプリケーションの複数のプロファイルを実行できるようにするためです。仕様には他の専用のユーザー固有のディレクトリもあります。

共有ゲームデータ

/ var / games /

共有構成ファイルは次の場所に配置する必要があります

/ etc / games /

一時的なゲームデータ

/ tmp


1
詳しく説明すると、ゲーム「Aquaria」は、ゲームデータを〜/ .aquaria(または〜/ .config / Aquaria)に配置する必要があります。/ varに誰でも書き込み可能なディレクトリがあるのは嫌です。それを実現する一般的な方法は、ゲームのユーザーアカウントを作成し、そのディレクトリに書き込むことができる唯一のアカウントにすることです(そして、通常の人がゲームをプレイしているときにsetuidを使用します)。これは、必要以上の作業になる可能性があります。
ダーセナン

実際、ほとんどのデスクトップはXDG仕様に準拠しようとしていますが、XDG仕様では、構成および代わりにsavegames(standards.freedesktop.org/basedir-spec/basedir-spec-latest.htmlを参照)。これは主にユーザーのホームディレクトリを整理するためであり、ユーザーが必要と判断した場合にアプリケーションの複数のプロファイルを実行できるようにするためです。仕様には他の専用のユーザー固有のディレクトリもあります。
リオリ

@liori時間を見つけられたら、明日回答を更新します。遅れてすみません。気になって時間がある場合は、お気軽に情報を更新してください。私にとっても便利です。
クライム
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.