Установка текущего каталога запущенного приложения в Stack Overflow

Следующие ответ дает решение с использованием C #, мне было интересно, что будет эквивалент, если бы вы использовали только c ++ (не c ++ \ cli)

System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);

Есть ли что-то, что могло бы помочь?

Исходя из этой проблемы у меня было: Правильное создание и запуск службы win32 с файловым вводом / выводом

0

Решение

SetCurrentDirectory (в Win32):

http://msdn.microsoft.com/en-us/library/windows/desktop/aa365530%28v=vs.85%29.aspx

current_path в boost::filesystem:

http://www.boost.org/doc/libs/1_51_0/libs/filesystem/doc/reference.html#current_path

Эквивалентом для BaseDirectory может быть GetModuleFileName (с нулевым дескриптором для первого аргумента), затем GetFullPathName чтобы получить каталог из исполняемого пути.

8

Другие решения

использование SetCurrentDirectory WINAPI.

Еще один ответ доступен на В чем разница между _chdir и SetCurrentDirectory в Windows?

Возможно, есть также необходимость в имени модуля (кажется из комментариев), вот один из моего старого магазина: —

int main()
{
char path[MAX_PATH]={0};
GetModuleFileName(0,path,MAX_PATH);
}
4

В Windows полный эквивалент

System.IO.Directory.SetCurrentDirectory ( System.AppDomain.CurrentDomain.BaseDirectory )`

было бы:

// Get full executable path
char buffer[MAX_PATH];
GetModuleFileName(NULL, buffer, MAX_PATH);

// Get executable directory
boost::filesystem::path path(buffer);
path = path.parent_path();

// Set current path to that directory
boost::filesystem::current_path( path );

Обратите внимание, что не существует независимого от платформы способа получения каталога приложения, поскольку C ++ не распознает концепцию каталогов в стандарте. Boost также не имеет эквивалентной функции.

4
По вопросам рекламы [email protected]