我正在使用wget在我的應用程序旁邊下載jar並運行它。問題在於我的當前設置wget.exe必須保存在應用程序數據的文件夾中,而且這實際上並不聰明,即文件如何在那裏開始?如何判斷應用程序在C++中運行的位置
那麼,無論從哪裏運行應用程序,如何找到應用程序正在運行的目錄?
我正在使用wget在我的應用程序旁邊下載jar並運行它。問題在於我的當前設置wget.exe必須保存在應用程序數據的文件夾中,而且這實際上並不聰明,即文件如何在那裏開始?如何判斷應用程序在C++中運行的位置
那麼,無論從哪裏運行應用程序,如何找到應用程序正在運行的目錄?
你必須閱讀PWD環境變量
當我累了 的std ::法院<< GETENV( 「PATH」),它吐出來,大約10條路徑。 – THUNDERGROOVE 2012-03-31 07:29:19
路徑不是當前位置,是目錄的搜索,當你運行一個命令到列表中。即當你寫「cd」時,系統會在這些路徑中查找cd命令。你可以使用該var,如果你想能夠把wget.exe放在你想要的地方。 – kappa 2012-03-31 07:40:31
一些提高文件系統的善良應太,像...
#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;
}
在不同的操作系統中,這也是可移植的。 – 01100110 2012-03-31 14:34:53
對於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);
}
而你一個pp已經啓動了'wget'? – 2012-03-31 07:16:47
啓動了嗎?沒有? 我一直在使用system()調用來使用它 – THUNDERGROOVE 2012-03-31 07:30:41
一個'system()'調用啓動另一個程序,是的。這就是它的工作原理。除非'wget'正在運行,否則'wget'不能執行任何操作。 'system()'的目的是讓另一個程序運行。 – 2012-03-31 07:49:54