Когда двойной щелчок по файлу приводит к открытию исполняемого файла, путь и имя файла передаются в качестве первого аргумента командной строки.
int main(int argc, char *argv[]) {
if(argc<2) return 1;
std::ifstream file(argv[1]);
// ...
}
Поскольку первая запись в argv - это путь кисполняемый файл, вас интересует второй аргумент, argv [1].