ページ 11

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

Posted: 2013年8月09日(金) 10:58
by みけCAT
ゲームなどで、素材へのパスを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();として呼び出します。
カレントディレクトリの変更に成功すれば真が、失敗すれば偽が返るはずです。

使用、改造、再配布、商用利用などは自由、報告不要です。
ただし、これを使用した結果発生した損害などについては、このコードが間違っていた場合も含め、一切責任を負いません。
自己責任でお願いします。

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

Posted: 2013年8月12日(月) 02:05
by Poco
コミュニティ名に釣られて参加しました。
よろしくお願いします。

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