3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(C++)ファイルパスからフォルダパスを取得する

(VC++)自身のアプリケーションファイルのexeファイルのパスを取得する方法で、Windows APIGetModuleFileName 関数を使うと自身のフォルダパスを取得することができることを書きました。

で、今回はファイル名を含むフルパスから、フォルダパスを取得する方法です。

普通に文字列操作でやってもいいんですが、PathRemoveFileSpec というAPIがあるようなので、それを使ってみました。

PathRemoveFileSpec 関数を使うには、shlwapi.h のインクルードと shlwapi.lib とのリンクが必要なようです。

これは Visual Studio 2008 の場合、プロジェクトのプロパティ → 構成プロパティ → リンカ → 入力 → 追加の依存ファイル で shlwapi.lib と入力すればいいようです。このリンクの方法を探すのに時間がかかりましたw

#include 

 

//このexeのパス取得

DWORD dwRet;

TCHAR path[1024];

dwRet = GetModuleFileName(NULL, path, sizeof(path));

if(dwRet == 0) {

//エラー処理など(省略)

}

//exeのパスからファイル名を除去し、ディレクトリ取得

BOOL ret = PathRemoveFileSpec(path);

ただ、IEが無いとこの関数は使えないようです。

PathRemoveFileSpec

[Win32 API] ファイルのパスからディレクトリのパスを取得 - かえでのWebログ