C ++ удаляет определенное количество элементов из конца массива - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь написать программу, чтобы получить путь к папке, из которой она запущена (в Windows).

Это то, что у меня так далеко:

char path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);

Это отлично работает, но дает полный путь, включая имя exe.Я только хочу путь к папке, в которой находится исполняемый файл, не включая имя исполняемого файла.Я попытался получить длину argv [0] и убрать ее с конца пути, но я не могу понять, как заставить это работать.

Любая помощь будет принята с благодарностью!

1 Ответ

0 голосов
/ 25 июня 2018

Я пытаюсь написать программу, чтобы получить путь к папке, из которой она запущена (в Windows).

Возможны две интерпретации: Папка, в которой хранится исполняемый файлв (что отражено в вашем коде) или в текущем рабочем каталоге (что не обязательно совпадает, но я бы понял ...) Для последнего есть еще одна функция Windows API для.

char path[MAX_PATH];
GetModuleFileName(NULL, path, MAX_PATH);

Редактировать: as PaulMcKenzie , обозначенный в его комментарии: уже есть функция PathRemoveFileSpec, которая устарела, хотя вместо нее следует использовать PathCchRemoveFileSpec :

PathCchRemoveFileSpec(path, sizeof(path));

Сохраняя предыдущий ответ (только для лучшего понимания):

OK, так как GetModuleFileName возвращает полный путь, вы получаете что-то вроде:

c:\some\path\to\your\file.exe

Все, что вам нужно сделать сейчас, это найтирасположение последней косой черты:

char* end = strrchr(path, '\\');
// actually cannot be nullptr, as path is fully qualified, but still for security:
if(end)
{
    // cut off the rest...
    *end = 0; // new end, null character denotes it...
}
else
{
    // something has badly gone wrong...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...