2011-05-31 6 views
1

私は、ファイルへの完全なパスを知らずに、実行可能ファイルと同じディレクトリにconfig.iniを探すためにC++プログラムにハードコードを作成しようとしています。私は実行可能ファイルへのローカル参照を作成する方法を見つけることを試みています。Win APIローカルファイルリファレンスC++

基本的に負荷( "./config.ini ")

やっなし(" C:\ fooという\バー\ config.iniのを")

答えて

1

あなたが欲しいGetModuleFilename() Windows上で(現在の実行ファイルのファイル名を取得するにはNULLを渡します)。それ以外の場合は、プログラムの早い段階でboost::filesystem::initial_path()に電話してください(これを早期に行う理由については、リンクのBoost docsを参照してください)。それはほとんどの状況をカバーするはずです。

編集

脳の機能不全。実行可能ファイルのディレクトリからプログラムを起動するので、boost::initial_path()が動作しますが、別のdirecoryからプログラムを起動するとうまく動作しません。そのことを混乱させて申し訳ありません。 Windowsでは、私はGetModuleFilenameからのパスを取得し、boost::pathを使用して結果を操作します。 Windows用の

+0

'GetModuleFilename'は正しい動作をしますが、実行可能ファイルを含むディレクトリとは異なるCWDを持つプロセスを開始するのは簡単なので、' initial_path() 'は役に立ちません。 – ildjarn

+0

これを書いていたときにその効果を編集していなければなりません。ありがとう。 – gregg

2

のいずれかの保証はポータブルな方法は本当にありませんこれを行うが、それはほとんどの場合に動作しますので、私は(シンボリックリンクやその他の魔法が関与しなければ)このコードを使用したい:

boost::filesystem::current_path(boost::filesystem::path(argv[0]).remove_filename()); 

あなたがWindows上GetModuleFileNameで、プラットフォーム固有のコードを見て使用して喜んでいる場合との組み合わせ、Linuxの/procおよびreadlinkからの読み取りWindowsの場合

-1

:プラットフォームに依存しないソリューションは、ここで議論された

#include <direct.h> 

char cur_path[FILENAME_MAX]; 

if (!_getcwd(cur_path, sizeof(cur_path))) 
{ 
    // deal with error 
} 

cur_path[sizeof(cur_path) - 1] = '/0'; // adding \0 at the end of the string 

printf("Current dir: %s", cur_path); 

How do I get the directory that a program is running from?

+1

彼は現在の作業ディレクトリを取得する方法を求めていませんが、実行可能ファイルのディレクトリを取得する方法については問いません。 – xDD

+0

OPはこのチェックを自分のアプリケーションにハードコードします。アプリケーションが実行されるたびに、_getcwd()は現在のディレクトリ(config.iniがあるディレクトリ)を返します。 – karlphillip

0

、これはC++文字列としてexcutableを含むディレクトリを取得します:

#include <windows.h> 
#include <string> 
#include <iostream> 
using namespace std;; 

string ExePath() { 
    char buffer[MAX_PATH]; 
    GetModuleFileName(NULL, buffer, MAX_PATH); 
    string::size_type pos = string(buffer).find_last_of("\\/"); 
    return string(buffer).substr(0, pos); 
} 

その後、ちょうど最後に、あなたの設定ファイルの名前にタグを付けることができます。

関連する問題