艦メモの設定ファイルやキャッシュの保存場所

艦メモが保存する各種ファイルとその保存場所についてです。

/// 保存するファイルの種類 ///
設定
 KanmusuMemory.ini : 各種設定やCookie情報など
 KanmusuMemoryFav.ini : ユーザーが保存したお気に入り情報
ダウンロードデータ
 favoritedata.json : 初期配置されてるお気に入り(wikipediaなど)
 timerselectguide.json : タイマーの建造や遠征のテンプレ情報
キャッシュ
 いろいろ

/// Windowsの場合 ///
設定
 C:\Users\Iori\AppData\Roaming\KanmemoProject\
ダウンロードデータ
 C:\Users\USERNAME\AppData\Local\KanmusuMemory\
キャッシュ
 C:\Users\USERNAME\AppData\Local\KanmusuMemory\cache\ (Ver0.11まで)
 C:\Users\USERNAME\AppData\Local\KanmusuMemory\cache2\ (Ver0.12から)


/// Ubuntuの場合 ///
設定
 ~/.config/KanmemoProject/
ダウンロードデータ
 ~/.local/share/KanmusuMemory/
キャッシュ
 ~/.cache/KanmusuMemory/ (Ver0.11まで)
 ~/.cache/KanmusuMemory/ (Ver0.12から)

/// Mac OS Xの場合 ///
設定
 ~/.config/KanmemoProject/
ダウンロードデータ
 ~/Library/Application Support/KanmusuMeory/
キャッシュ
 ~/Library/Caches/KanmusuMeory/ (Ver0.11まで)
 ~/Library/Caches/KanmusuMeory/ (Ver0.12から)


/// お知らせ ///
Ver 0.12から開発環境のQtのバージョンを5.2.1に変更しました。
その都合で今までのキャッシュデータが使用できなくなったためパスを変更しました。

ある日突然DMMのログイン画面からゲーム画面へ進めなくなった」ときは、以下の方法で対処してください。
 ・全てのバージョン
  艦メモを落とした状態で、キャッシュフォルダの内容を削除する。
 ・Ver 0.12以降
  コマンドラインから以下の引数を追加して実行してください。引数はWin/Mac/Ubuntu共通です。
  (毎回使用すると毎回キャッシュを削除してしまいます。)
  >KanmusuMemory /clearcache




/// 解説 ///
保存場所についてですが、Qtでは環境ごとにお作法の違う保存先をいい感じに処理してくれます。

まず、設定の保存場所ですが、こちらはQSettingsクラスが自動的に選んでくれています。
下記のサンプルの「今」のコンストラクタの使用方法だとユーザーエリアに保存してくれます。「以前」の使用方法ではファイル名を指定方法でカレントディレクトリに保存されます。大抵は実行ファイルと同じフォルダになります。
実はこれだとMac OS X 10.9から保存できなくなってしまいました。(セキュリティ強化なのでしょうか)そのため、保存先を変更する意味もあって使用方法を変更しています。
//今
QSettings settings(QSettings::IniFormat, QSettings::UserScope, "organization", "application");
//以前
QSettings settings("hoge.ini", QSettings::IniFormat);

ダウンロードデータとキャッシュについてはQStandardPaths::writableLocation()を使用して場所を取得します。
このメソッドを使用するとシステム内で書き込み可能なフォルダパスを取得することが可能です。
引数にデスクトップやドキュメント、一時フォルダなど取得したいパスを指定するだけです。
書き込み可能であればパスが実際に返ってきます。

艦メモでは以下のように取得してます。
//ダウンロードデータ
qDebug() << QStandardPaths::writableLocation(QStandardPaths::DataLocation);
//キャッシュ用フォルダ
qDebug() << QStandardPaths::writableLocation(QStandardPaths::CacheLocation);

基本的にはQtがなんとかしてくれるので細かいこと考えなくても良いのでいいですね。