カレントディレクトリをexeファイルのあるディレクトリにする

みんなが作った便利な関数やサンプルを共有するコミュニティです。
[url]http://www.activebasic.com/forum/viewforum.php?f=2]ActiveBasicの「実践コードモジュール」[/url]的な感じでやりましょう。
フォーラム(掲示板)ルール
・投稿するコードはできるだけ一つ、もしくは一つの関数を補助する複数の関数の形式にするか、
それだけをコンパイルして動くソースコード一式の形にしてください。
記事には説明だけを書き、コードは添付ファイルにしてもかまいません。
・使い方などの説明も書いてください。
環境に依存するコードの場合は、対象の環境も書いてください。
・使用条件(ライセンスなど)も書いていただけるとありがたいです。
・C言語、もしくはC++推奨ですが、他の言語でもかまいません。
・コードは正しくcodeタグで囲みましょう。
・一つのスレッドで一つのサンプルが基本です。
関連するサンプルの場合はまとめてもかまいません。
・投稿したサンプルを修正する場合には、スレッドの返信の形で投稿してください。
(新しいスレッドにしないでください。記事の編集でもかまいません)
返信
アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

カレントディレクトリをexeファイルのあるディレクトリにする

#1

投稿記事 by みけCAT » 10年前

ゲームなどで、素材へのパスをexeファイルのあるディレクトリからの相対パスで指定していると、
自作ランチャーからの起動などでカレントディレクトリがexeファイルのあるディレクトリではなかった場合に
素材が読み込めず、おかしくなってしまうことがあります。

でも、ゲームのプログラム開始時にこの関数を呼び出しておけば、
カレントディレクトリをexeファイルのあるディレクトリにしてくれるので、そのような心配はありません。

コード:

#include <windows.h>

BOOL chdirToExeDir(void) {
    wchar_t path[65536];
    int i,j,len;
    if(GetModuleFileNameW(NULL,path,sizeof(path))==0)return FALSE;
    j=len=lstrlenW(path);
    for(i=0;i<len;i++) {
		if(path[i]==L'\\')j=i;
    }
    if(j>0 && (path[j-1]==L':' || path[j-1]==L'\\'))j++;
    path[j]=L'\0';
    return SetCurrentDirectoryW(path);
}
使い方
プログラムの開始時、初期化の一番最初あたりでchdirToExeDir();として呼び出します。
カレントディレクトリの変更に成功すれば真が、失敗すれば偽が返るはずです。

使用、改造、再配布、商用利用などは自由、報告不要です。
ただし、これを使用した結果発生した損害などについては、このコードが間違っていた場合も含め、一切責任を負いません。
自己責任でお願いします。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

Poco
記事: 161
登録日時: 13年前

Re: カレントディレクトリをexeファイルのあるディレクトリにする

#2

投稿記事 by Poco » 10年前

コミュニティ名に釣られて参加しました。
よろしくお願いします。

早速質問なのですが、ワイド文字環境でのみ対応しているのは何か理由があるのでしょうか?

返信

“サンプルを共有するコミュニティ” へ戻る