覚書:環境変数展開

何がやりたいかというと、ちゃんとしたコマンドラインプログラムを作りたい。環境変数でパスを通した場所を探索して、指定された名前のファイルが見付かれば、これほどうれしいことはない。何度調べても、いまどきちゃんとしたコマンドラインプログラムなんて作らないわけで、いちいち忘れる。ので、覚書でも。

Windows のCランタイムライブラリなら _searchenv_s() なる関数がある。

char result[_MAX_PATH];
assert(0 == _searchenv_s("hoge.txt", "FUGA_PATH", result));

とでもすればいいらしい。FUGA_PATH には ; で区切られた PATH 形式の環境変数も指定できるらしい。result に検索されたファイルのパスが入る。実は試してはいないが。(Download Visual Studio 2005 Retired documentation from Official Microsoft Download Center)

Win32 API なら、SearchPath() (Microsoft API and Reference Catalog) か。ただ、これはあまり便利そうでもない。検索パスに任意の環境変数を指定できそうではない。

ちなみに、un*x な環境で該当する関数はないそうな。

その他、参考にしたペイジ:

さらにその他、いろいろ検索中に見付けた、面白そうなペイジ: