プログラムを書こう!

実務や自作アプリ開発で習得した役に立つソフトウェア技術情報を発信するブログ

C++/CLIでアプリが実行されるディレクトリを取得する。

f:id:paveway:20190914064630j:plain

はじめに

不具合調査などのためにログをファイルに出力しておくことはよくあると思います。
今回もログファイルを作成しようと考えましたが、出力場所をどこにするかお客様と相談しました。
その結果、アプリが動作しているディレクトリに作成することになりました。
そのためアプリが実行されるディレクトリの取得方法を調査したので、まとめてみました。

Application.ExecutablePathプロパティ

ApplicationクラスのExecutablePathプロパティで、アプリが実行されたパス名+ファイル名が取得できます。
今回はアプリが実行されたパス名が欲しいので、終端のパス区切り文字の前までを切り出すことにします。

///
/// アプリが実行されたパス名を取得する。
/// @return アプリが実行されたパス名
///
String^ GetExecutePath()
{
    // アプリが実行されたパス名+ファイル名を取得します。
    String^ executePath = Application::ExecutablePath;
    
    // 終端のパス区切り文字"¥"の位置を取得します。
    // "¥"はエスケープシーケンスして"¥¥"とします。
    int index = executePath->LastIndexOf("¥¥");
    
    // 終端のパス区切り文字の位置が取得できた場合
    // 念のためのチェック
    if (index > 0)
    {
        // 先頭からパス区切り文字の前までを切り出します。
        executePath = executePath->Substring(0, index);
    }
    return executePath;
}

実は調査した時はExecutablePathプロパティを使用して解決しまいたが、後日よく調べたらアプリが実行されたディレクトリを示すStartupPathプロパティが存在しました。
なので今回の要件を満たすにはStartupPathプロパティを使用すればよかったです。
しかしせっかくなので調査した当時のメモをそのまま公開します。

API Reference
Application.ExecutablePathプロパティ
Applicaiton.StartupPathプロパティ

おわりに

実装時にがんばって解決したことが、あとでもっといい方法を見つけたりすることはよくあります。
日々精進が大切だと思います。

個人や企業が主催する講座・教室・レッスン・ワークショップが10,000件以上 日本最大級のまなびのマーケット「ストアカ」

紹介している一部の記事のコードはGitlabで公開しています。
興味のある方は覗いてみてください。


私が勤務しているニューラルでは、主に組み込み系ソフトの開発を行っております。
弊社製品のハイブリッドOS Bi-OSは高い技術力を評価されており、特に制御系や通信系を得意としています。
私自身はiOSモバイルアプリウィンドウズアプリを得意としております。
ソフトウェア開発に関して相談などございましたら、お気軽にご連絡ください。

また一緒に働きたい技術者の方も随時募集中です。
興味がありましたらご連絡ください。

EMAIL : info-nr@newral.co.jp / m-futamata@newral.co.jp
TEL : 042-523-3663
FAX : 042-540-1688