Я знаю, что уже очень поздно бросать ответ на этот вопрос, но я обнаружил, что ни один из ответов не был для меня столь же полезным, как мое собственное решение. Очень простой способ получить путь от вашего CWD до вашей папки bin выглядит так:
int main(int argc, char* argv[])
{
std::string argv_str(argv[0]);
std::string base = argv_str.substr(0, argv_str.find_last_of("/"));
}
Теперь вы можете просто использовать это как базу для вашего относительного пути. Так, например, у меня есть эта структура каталогов:
main
----> test
----> src
----> bin
и я хочу скомпилировать мой исходный код в bin и написать журнал для проверки. Я могу просто добавить эту строку в свой код.
std::string pathToWrite = base + "/../test/test.log";
Я попробовал этот подход в Linux, используя полный путь, псевдоним и т. Д., И он работает просто отлично.
Примечание:
Если вы находитесь в Windows, вы должны использовать '\' в качестве разделителя файлов, а не '/'. Вам тоже придется избежать этого, например:
std::string base = argv[0].substr(0, argv[0].find_last_of("\\"));
Я думаю, что это должно сработать, но не проверялось, поэтому мы будем благодарны за комментарии, если это сработает, или исправление, если нет.