Как получить имя текущего исполняемого файла в С++

Вопрос:Я хочу получить полный путь к текущему процессу. Я использую _getcwd для получения текущего рабочего каталога. Но это не включает имя файла. Как получить имя файла, например: filename.exe? Лучший ответ: В окнах вы можете использовать: TCHAR szExeFileName[MAX_PATH]; GetModuleFileName(NULL, szExeFileName, MAX_PATH); szExeFileName будет содержать полный путь + имя исполняемого файла [править] Для более портативного решения используйте

Вопрос:

Я хочу получить полный путь к текущему процессу.

Я использую _getcwd для получения текущего рабочего каталога. Но это не включает имя файла.

Как получить имя файла, например: filename.exe?

Лучший ответ:

В окнах вы можете использовать:

TCHAR szExeFileName[MAX_PATH]; GetModuleFileName(NULL, szExeFileName, MAX_PATH);

szExeFileName будет содержать полный путь + имя исполняемого файла

[править]

Для более портативного решения используйте argv[0] или какой-либо другой код на платформе. Здесь вы можете найти такой подход: https://github.com/mirror/boost/blob/master/libs/log/src/process_name.cpp.

Ответ №1

argv[0] вашей основной функции является ваше имя файла.

Простой фрагмент кода:

#include<stdio.h> int main(int argc,char** argv) { //access argv[0] here } Ответ №2

В Linux имя файла вашего двоичного файла является адресом символической ссылки в /proc/self/exe. Системный вызов readlink можно использовать для поиска адресата символической ссылки.

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

Ответ №3

Обычно вы можете получить имя исполняемого файла из argv[0]:

#include <stdio.h> int main(int argc, char* argv[]) { printf(«Running: %sn», argv[0]); return 0; }

Действительно, есть способы приложения к execl() другому приложению (или другой подобной функции) и переопределить этот аргумент. Для системы все равно нетипично изменить ее для такого рода приложений.

Ответ №4

Как уже упоминалось, имя вашего исполняемого файла содержится в argv [0]. Если вам это нужно, вы можете:

cout << argv[0] << endl;

Если вам нужно имя исходного файла исполняемого файла, С++ имеет предопределенный макрос, который вы можете использовать:

cout << __FILE__ << endl;

Перейдите к здесь и выделите “Предопределенные имена макросов”

Ответ №5

Вы можете использовать program_invocation_name из errno.h

Ответ №6

В Linux (POSIX?) есть переменная среды, называемая _, которая содержит текущий процесс.

$ echo $_ echo

В С++

#include <stdlib.h> /* getenv */ #include<iostream> int main(){ std::cout << getenv(«_») << ‘n’; return 0; }

компиляции

$ c++ a.cpp -o a.out $ ./a.out

печатает ./a.out (или что-то другое – это выполненная строка, включая путь).

Это имеет определенные преимущества по сравнению с другими подходами, его можно читать глобально (не передавать argv[0]) и не требует обработки файлов.

Оцените статью
Добавить комментарий