Следующие ответ дает решение с использованием C #, мне было интересно, что будет эквивалент, если бы вы использовали только c ++ (не c ++ \ cli)
System.IO.Directory.SetCurrentDirectory(System.AppDomain.CurrentDomain.BaseDirectory);
Есть ли что-то, что могло бы помочь?
Исходя из этой проблемы у меня было: Правильное создание и запуск службы win32 с файловым вводом / выводом
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
чтобы получить каталог из исполняемого пути.
использование SetCurrentDirectory WINAPI.
Еще один ответ доступен на В чем разница между _chdir и SetCurrentDirectory в Windows?
Возможно, есть также необходимость в имени модуля (кажется из комментариев), вот один из моего старого магазина: —
int main()
{
char path[MAX_PATH]={0};
GetModuleFileName(0,path,MAX_PATH);
}
В 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 также не имеет эквивалентной функции.