バージョン1.2.12系以上のopenBVEのユーザごとのデータ保存ディレクトリについてとシミュレータ開始後に正常にメインウィンドウに戻らない場合の対処(前半)
openBVEのバージョン1.2.12系(開発版は1.2.11系)からは設定ファイル群は各ユーザごとの設定ディレクトリに保存されるようになっている。これはMonoや.NET Frameworkの基本クラスライブラリにおけるSystem.Environment.SpecialFolder.ApplicationDataの値に基づいており、GNU/Linux上のMonoでは${XDG_CONFIG_HOME}/以下(環境変数XDG_CONFIG_HOMEが未定義の場合は${HOME}/.config/以下)にopenBVEというディレクトリが作られてその中のサブディレクトリに設定ファイルが保存されることになっている。WindowsではOSのバージョンによってC:\Documents and Settings\[ユーザ名]\Application Data\[Windows XPなど],C:\Users\[ユーザ名]\AppData\Roaming\(もしくはこれを指し示すジャンクション*1C:\Users\[ユーザ名]\Application Data\)[Windows 7など]のような場所の下になるらしい(実際のWindows上では未確認・OSはCドライブに入っているものとする)。
保存ディレクトリの確認ツールを作成
下のBoo言語のコードを用いるとこの設定ディレクトリを確認できる(実行にはBooが必要)。実行時の環境変数XDG_CONFIG_HOMEによって出力は変わる。
[任意]ファイル名: openbveuserdir.boo ライセンス: CC0
#! /usr/bin/booi # CC0 import System print (IO.Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData), 'openBVE'))
下は実行結果。
$ env -u XDG_CONFIG_HOME [openbveuserdir.booの場所] /home/[ユーザ名]/.config/openBVE $ XDG_CONFIG_HOME=/foo/bar [openbveuserdir.booの場所] /foo/bar/openBVE
下はWindows FormsのGUI上でSystem.Environment.SpecialFolder.ApplicationDataのディレクトリとopenBVEのユーザごとのデータ保存ディレクトリをPropertyGridというGUI部品に表示するコードとなる。
[任意]ファイル名: openbveuserdir_forms.boo ライセンス: CC0
#! /usr/bin/booi # -*- coding: utf-8 -*- # Environment.SpecialFolder.ApplicationDataとopenBVEのユーザごとのデータ保存ディレクトリを # Windows FormsのPropertyGridに表示する # CC0 import System.Windows.Forms import System class Dirs: """ ディレクトリ情報 OS,ApplicationData,openBVEUserDirの3つのプロパティから成る """ # 「[Property ([プロパティ名])] [データ格納メンバ] as [型] = [初期値]」で # 自動実装プロパティ(既定のgetter/setterを持つプロパティ)が定義できる # OS情報 [Property (OS)] _os as string = Environment.OSVersion.VersionString # ApplicationDataのディレクトリ情報 [Property (ApplicationData)] _appdata as string = Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData) # openBVEのユーザごとのデータ保存ディレクトリ情報 [Property (openBVEUserDir)] _openbve as string = IO.Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.ApplicationData), 'openBVE') class DirsPropertyGrid (PropertyGrid): """ ディレクトリ情報を表示するPropertyGrid """ def constructor (): self.SelectedObject = Dirs () # プロパティ内容を表示するオブジェクト self.Dock = DockStyle.Fill # スペースを占める/サイズ変更に対応 self.ToolbarVisible = self.HelpVisible = false # PropertyGridのツールバーとヘルプを隠す self.PropertySort = PropertySort.NoSort # 並べ替えを無効化 class DisplayOpenBveUserDirForm (Form): """ Environment.SpecialFolder.ApplicationDataのディレクトリと openBVEのユーザごとのデータ保存ディレクトリ情報を表示するフォーム """ def constructor (): self.Text = 'Display openBVE userdata directory' # ウィンドウタイトル self.Controls.Add (DirsPropertyGrid ()) # 子にPropertyGridを入れる self.Width = 500 # 幅 Application.Run (DisplayOpenBveUserDirForm ())
これをGNU/Linux上(GNU/Linux版Mono)で動かすと
のようになった(環境変数XDG_CONFIG_HOMEが未定義の場合)。OS名は「Unix [カーネルのバージョン]」と表示される(GNU/Linux,BSD,UNIXなどは区別されずにOS名は「Unix」となる仕様)。
Windows上での動作の参考として、Wine上のWindows版Monoで動かすと
のようになった。
(「バージョン1.2.12系以上のopenBVEのユーザごとのデータ保存ディレクトリについてとシミュレータ開始後に正常にメインウィンドウに戻らない場合の対処(後半)」に続く)
関連記事:
- Boo言語についてと同言語で書かれたプログラムの実行に関して
- バージョン1.2.12系以上のopenBVEのユーザごとのデータ保存ディレクトリについてとシミュレータ開始後に正常にメインウィンドウに戻らない場合の対処(後半)
使用したバージョン:
- openBVE 1.2.12.2
- Boo 0.9.4.9