Как узнать, где приложение запускается в C ++ - PullRequest
2 голосов
/ 31 марта 2012

Я использую wget вместе со своим приложением, чтобы загрузить банку и запустить ее.Проблема в том, что с моей текущей настройкой wget.exe нужно было бы хранить в папке с данными приложения, и это на самом деле не разумно, то есть, как файл попал туда с самого начала?

Так как же найтикаталог, в котором запускается приложение, независимо от того, откуда оно запускается?

Ответы [ 3 ]

3 голосов
/ 31 марта 2012

для окон:

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);
}

для Linux:

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);
}
1 голос
/ 31 марта 2012

Некоторое улучшение файловой системы тоже должно работать, что-то вроде ...

#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 голосов
/ 31 марта 2012

Вы должны прочитать переменную окружения PWD

...