ファイルのパスを取得するには?


Owl  2005-02-01 00:03:18  No: 56221  IP: 192.*.*.*

VB6.0からVC++.NETへ変えようと思っているのですが、
VBのApp.Pathのように
実行しているコードと同じフォルダの文字列(「パス」っていうんですか?)
を取得するにはどうすればよいのでしょうか?

編集 削除
シャノン  2005-02-01 02:19:35  No: 56222  IP: 192.*.*.*

GetModuleFileName を使います。
.NET なら、Assembly::GetExecutingAssembly()->get_Location() です。たぶん。

編集 削除
Kanchan  2005-02-11 20:26:58  No: 56223  IP: 192.*.*.*

__argv[0]  でも参照できます。
ちなみに  __argv[1] 以降にはコマンドライン引数が格納されます。

編集 削除
瀬戸っぷ  2005-02-11 21:32:20  No: 56224  IP: 192.*.*.*

> __argv[0]  でも参照できます。

パスが入っているかは環境依存だったような。
Win9X系とWinNT系で結果が違ったような…

ってか、私の回答&その後…でした。
http://madia.world.coocan.jp/cgi-bin/Vcbbs/wwwlng.cgi?print+200305/03050009.txt

編集 削除
Kanchan  2005-02-13 00:26:16  No: 56225  IP: 192.*.*.*

>パスが入っているかは環境依存だったような。
>Win9X系とWinNT系で結果が違ったような…

瀬戸っぷ様  フォローありがとうございます。
環境依存がありましたか。知らずにいつも__argv[0]を使っていました。
ちなみに、手元にあるWinXPおよびWin2000ではフルパスが取得できています。
WinNTの場合の問題でしょうか?

ともかく、GetModuleFileNameの方が確実そうですね。

編集 削除
瀬戸っぷ  2005-02-13 00:50:13  No: 56226  IP: 192.*.*.*

> ちなみに、手元にあるWinXPおよびWin2000ではフルパスが取得できています。

手元のWin2000SP4で下記のソースを実行。
「コマンド プロンプト」ではexe名だけ、
VC6.0からの実行ではフルパスで表示されました。
(ちなみに、コマンドプロンプトで相対パス指定で実行したら指定したとおりのパスが表示されました。)

#include <stdio.h>

int main(int argc, char *argv[])
{
  printf("%s\n", argv[0]);
  return 0;
}

> ともかく、GetModuleFileNameの方が確実そうですね。

ですね。

編集 削除