私は、Windows、Mac OS X、および Linux でネイティブに実行される GUI デスクトップ アプリケーションに取り組んでいます。クロスプラットフォーム アプリケーションで設定を保存するための推奨される方法は何ですか? 私は C++ を使用していますが、質問 (およびその回答) は、ネイティブにコンパイルされた言語に対して有効である必要があります。(動的言語と Java のソリューションについては、こちらを参照してください。)
私のこれまでの調査によると、少なくとも 2 つの戦略があることがわかりました。
(A) OS 固有の API 設定関数を使用します。
(B) 適切な (OS 固有の) フォルダー内のファイルに設定を保存します。
方法 (A) を考えてみましょう:NSUserDefaults
が Mac OS X の正しい方法だと思います。Windows システムでは、RegOpenKeyEx
. しかし、いくつかの疑問が生じます: それに匹敵する移植可能な Linux API はありますか? Windows レジストリへの書き込みは本当に将来性のあるソリューションですか?
物事を単純にするために、私は方法 (B) に従う傾向があります。したがって、選択した形式でデータを保存できる適切なディレクトリを取得するための OS 固有のコードしかありません。SHGetFolderPath
Windows については、 (またはSHGetKnownFolderPath
最近の Windows システムについては)学習済みでCSIDL_LOCAL_APPDATA
あり、進むべき道です。Mac では、NSSearchPathForDirectoriesInDomains
API 呼び出しで同じことを行う必要があります。物事をより複雑にしていますが、これは Objective-C API です。最後に、Linux バージョンではgetenv("HOME")
(およびgetpwuid()
フォールバック ソリューションとして) を使用することをお勧めします。
私の質問を要約すると:
1. このタスクのベスト プラクティスと見なされるパターンはありますか?
2. 正しいフォルダを見つけるなど、すべての汚れを抽象化する C++ クラスはありますか? (私はQSettingに遭遇しましたが、私は FLTK を使用しており、GUI ツールキットを変更したくありません。)
編集:
「設定」とは、アプリケーションとユーザーによって変更される可能性のあるデータを意味します。たとえば、最近のファイルのリスト、優先ウィンドウサイズなどです。