先日、VC++で作成したiTunesの再生履歴を自宅サーバへ送信するアプリケーションを、機能はほぼそのままにC# .NETで書きなおした。
書きなおした、と言っても、VC++で作った時点で、.NET、CLR、マネージドのアプリだから、全くC++の意味がなくて、普通に考えればC#で作るべきものであった、と言える。
主要コードは、VC++でのモノをそのままコピーペーストすればよくて、ポインタ参照の仕方や、usingの追加などを修正すれば終わりである。.NETライブラリを使っていて、同じバージョンのVisual Studioを使っているのだから当たり前の話だ。
設定ファイル(ConfigurationManager)周りだけはC#には標準機能で備わっているのでそちらを使うことにした。
さらに、ユーザ情報の設定画面など、最終形態に向けて実装した。
VC++の時は実行ファイルと同じディレクトリにある設定ファイルに、ユーザが設定した情報を上書きすることができることがわかったのだが、それでは、同じPCを複数アカウントで使い分けるときに問題になるかな?と思って、C#に切り替え、標準機能を使い、ユーザレベルで設定を保存することにした。
しかし、これがまた、デバッグ泣かせなのだ。私のアプリケーションは、アカウントはともかくとして、「最後にサーバに送信したトラックの「最後に再生した日時」」の情報を設定ファイルに記録しておくことで、同じ情報を複数回送信することを防いでいる。
しかし、C#の標準機能を使うと、デバッガから実行したときと、実行ファイルを直接実行した時で、設定ファイルが保存されるディレクトリが変わるのだ。だから、デバッグが完了したか?と思って実行ファイルを直接実行してみると、設定のやり直しになってしまう。アプリケーションの初期値の時間としては、ある程度過去の時刻を持たせておかないと、新規のユーザを許可したときに古いトラックが送信できなくなるため困る。
かといって、常にデバッガ上で実行するのもマシンパワー的に辛いし、設定ファイル的にいちいちコピーするのも面倒臭い。ディレクトリ階層がバージョン番号を含んだりして深いから、コピーするのも面倒だし、バッチファイルか?
開発者的にはどうするもんなんだろう?Macのplistはデバッガから実行しても単体実行しても同じ物使ってくれたから楽だったのだが。
コメント