2012-05-13 3 views
4

Во-первых, я хотел бы сказать, что я не имею в виду полный путь, что
GetModuleFileName или argv [0] yield. Есть ли более разумное решение, чем увольнение всего до последней обратной косой черты?Извлечение текущего исполняемого имени

+0

На какой платформе вы являетесь? Я полагаю, Windows? –

+2

Что не так с тем, чтобы взять все после последнего разделителя пути? Я сам использую собственную написанную функцию basename для argv [0]. –

+0

Есть также функции пути, чтобы сделать это. – chris

ответ

13

Прежде всего, вы хотите получить полный путь к исполняемому файлу, позвонив GetModuleFileName, передавая NULL в качестве дескриптора модуля. Затем вызовите PathFindFileName, чтобы вытащить компонент имени файла.

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

+1

Вот что я пытался найти. На самом деле, я нахожу * забавным, как этот пример использует 'void main'. Серьезно, Microsoft? – chris

+1

Microsoft разрешает это делать так, потому что они пишут компилятор. Таким образом, они могут использовать специальное расширение для компилятора, которое вы и я (как хорошие стандарты после граждан) не могут. –

0

Если вы используете .NET, то ответ here. Но внутренне он может звонить GetModuleFileName.

+0

Я не использую .NET. Это проект Windows api. – 0x6B6F77616C74

+0

Хорошо. Я вижу, что ты получил ответ, я просто подниму его. –

Смежные вопросы