Boost:: file_system, как узнать, в каком каталоге находится ваш исполняемый файл?

Итак, я запускаю свое приложение. Мне нужно, чтобы он знал, где его исполняемый файл. Как найти путь к нему с помощью файловой системы boost?

Ответ 1

Если вы имеете в виду из исполняемого файла, который вы используете, вы можете использовать boost:: filesystem:: current_path()

Ответ 2

boost::filesystem::system_complete(argv[0]);

например.

[[email protected] Debug]$ ./boostfstest 
/home/davka/workspaces/v1.1-POC/boostfstest/Debug/boostfstest

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

Ответ 3

Вы не можете сделать это надежно с boost:: filesystem.

Однако, если вы находитесь в окнах, вы можете вызвать GetModuleFileName, чтобы получить полный путь к исполняемому файлу, а затем использовать boost::filesystem для получения каталога. (см. parent_path)

Ответ 4

Как обсуждалось более подробно здесь, самый надежный способ сделать это не через boost:: filesystem. Вместо этого ваша реализация должна учитывать операционную систему, на которой выполняется приложение.

Однако для быстрой реализации без проблем переносимости вы можете проверить, возвращает ли ваш argv [0] полный путь к исполняемому файлу. Если это положительно, вы можете сделать что-то вроде:

namespace fs=boost::filesystem;

fs::path selfpath=argv[0];

selfpath=selfpath.remove_filename();