2012-03-31 8 views
2

jarをダウンロードして実行するには、私のアプリ側にwgetを使用しています。問題は私の現在のセットアップwget.exeは、アプリケーションデータのフォルダに保持する必要があり、実際にはスマートではないすなわちどのようにファイルがそこに着くだろうか?アプリケーションがC++でどこで実行されているかを確認する方法

どのようにしてどこから実行されているに関係なく、アプリケーションが実行されているディレクトリを見つけるだろうか?

+0

あなたppは 'wget'を起動しましたか? –

+0

起動しましたか?いいえ? 私はsystem()コールを使ってそれを使用しています – THUNDERGROOVE

+0

'system()'コールが他のプログラムを起動します。それがどのように機能するのですか? 'wget'は実行中でなければ何もできません。 'system()'の目的は、別のプログラムを実行させることです。 –

答えて

0

あなたは、いくつかのブーストファイルシステムの良さがあまりにも動作するはずPWD環境変数に

+0

疲れたとき std :: cout << getenv( "PATH")これは約10のパスを吐き出します。 – THUNDERGROOVE

+1

PATHは現在の位置ではなく、コマンドを実行するときに検索するディレクトリのリストです。私。あなたが "cd"システムを書いたときに、そのパスでcdコマンドを探します。もしあなたが望む場所にwget.exeを置くことができるならば、そのvarを使うことができます。 – kappa

1

を読まなければならないの窓のために何かのような...

#include <boost/filesystem/path.hpp> 
#include <boost/filesystem/operations.hpp> 
#include <iostream> 

int main() 
{ 
    std::cout << boost::filesystem::current_path().string() << std::endl; 
    return 0; 
} 
+0

これは、異なるオペレーティングシステム間でも移植可能です。 – 01100110

3

:Linux用

std::string calculateRunPath() 
{ 
    const unsigned int size = 500; 
    char buf[size] = {0}; 
    HMODULE hModule = GetModuleHandle(NULL); 
    GetModuleFileName(hModule,buf, sizeof(buf)); 

    std::string path(buf); 
    size_t pos = path.find_last_of('\\'); 

    return path.substr(0, pos); 
} 

std::string calculateRunPath() 
{ 
    const unsigned int size = 500; 
    char path[size + 1] = {0}; 

    size_t len = readlink("/proc/self/exe", path, size); 
    path[len] = 0; 
    char* p = strrchr(path, '/'); 
    if(p) 
     *(p + 1) = 0; 
    else 
     path[0] = 0; 

    return std::string(path); 
} 
関連する問題