2012-03-31 88 views
2

我正在使用wget在我的應用程序旁邊下載jar並運行它。問題在於我的當前設置wget.exe必須保存在應用程序數據的文件夾中,而且這實際上並不聰明,即文件如何在那裏開始?如何判斷應用程序在C++中運行的位置

那麼,無論從哪裏運行應用程序,如何找到應用程序正在運行的目錄?

+0

而你一個pp已經啓動了'wget'? – 2012-03-31 07:16:47

+0

啓動了嗎?沒有? 我一直在使用system()調用來使用它 – THUNDERGROOVE 2012-03-31 07:30:41

+0

一個'system()'調用啓動另一個程序,是的。這就是它的工作原理。除非'wget'正在運行,否則'wget'不能執行任何操作。 'system()'的目的是讓另一個程序運行。 – 2012-03-31 07:49:54

回答

0

你必須閱讀PWD環境變量

+0

當我累了 的std ::法院<< GETENV( 「PATH」),它吐出來,大約10條路徑。 – THUNDERGROOVE 2012-03-31 07:29:19

+1

路徑不是當前位置,是目錄的搜索,當你運行一個命令到列表中。即當你寫「cd」時,系統會在這些路徑中查找cd命令。你可以使用該var,如果你想能夠把wget.exe放在你想要的地方。 – kappa 2012-03-31 07:40:31

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 2012-03-31 14:34:53

3

對於Windows:

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); 
} 
相關問題