Путь к файлу программы без консоли. С++

277
07 февраля 2018, 13:31

Всем привет, мне нужно узнать программно где лежат файл программы.

Это делается так если включена консоль.

#include<string>
#include<Windows.h>
using namespace std;
void main(int argc, char*argv[])
{
    //Получить текущую деректорию
    //TCHAR buffer[MAX_PATH];
    //GetCurrentDirectory(sizeof(buffer),buffer);
    //cout << buffer << endl;

    if(argc > 0)
    {
    //получаим путь к програме
    string urlK = ""; 
    urlK += argv[0];
    //удаляем всё до слеша (название програмы)
    while(urlK.size() > 0) { bool br = 0;if(urlK[urlK.size()-1] == '/' || urlK[urlK.size()-1] == '\\'){br = 1;}
    urlK.erase(urlK.size()-1); if(br)break; }
    //устанавливаем путь к каталогу с программой как основной
    SetCurrentDirectory(urlK.c_str());
    }
return;
}

Вот элемент массива что содержат путь к нужному файлу. argv[0]

Проблема появляться если в проекте отключить консоль, тогда путь определяет совсем не тот что нужно.

Подскажите как получить путь к файлу если консоль отключена.

Без внешних библиотек по возможности (не верю что стандартных нет)

C++ vs 2010

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

Answer 1

Это делается через GetModuleFileName(), в качестве хэндла нужно указать NULL.

Answer 2

В новом стандарте (C++17) появилась такая возможность (На основе boost/filesystem) получение пути: std::filesystem::current_path. Вот ссылка. Думаю, что уже можно активно ее использовать. А вот на счет наличие новых стандартов в msvs 2010 не знаю. Лучше же переходить на более новые. Либо лайвхаки по использованию нового SDK для старых версий.

READ ALSO
Нужна помощь, чтобы разобраться в задаче [требует правки]

Нужна помощь, чтобы разобраться в задаче [требует правки]

Дан одномерный массивНайти количество различных чисел в этом массиве, используя функцию сортировки

250
Проблема синхронизации потоков в Embarcadero Builder C++

Проблема синхронизации потоков в Embarcadero Builder C++

Пишу оконное приложение на Embarcadero C++ Builder XE7, ОС Windows 7В нем при запуске главной формы создается, но сразу не запускается поток

228
Разложение числа на множители

Разложение числа на множители

Всем привет, надо разложить число на множители(определенные)С маленькими числами все работает

259
Как Отловить вызов функции mono

Как Отловить вызов функции mono

Возможно ли присечь вызовы функций

258