Этот вопрос уже имеет ответ здесь:
Я должен получить доступ к некоторым файлам с fstream
в моем приложении C++ в Windows. Те файлы все расположены в подпапках папки, где мой EXE-файл расположен.
Используйте GetModuleHandle и GetModuleFileName , чтобы узнать, откуда запущен исполняемый файл.
HMODULE hModule = GetModuleHandleW(NULL);
WCHAR path[MAX_PATH];
GetModuleFileNameW(hModule, path, MAX_PATH);
Затем удалите имя exe из пути.
По умолчанию каталог, из которого запускается исполняемый файл, должен быть начальным местоположением. Таким образом, открытие файла в подпапке должно быть таким же простым, как
fstream infile;
infile.open(".\\subfolder\\filename.ext");
из вашей программы.
Однако нет реального способа ГАРАНТИРОВАТЬ, что это всегда будет работать, если только вы не используете фреймворк, который включает в себя необходимые функции (я бы посмотрел на boost), или напрямую не используете Windows API, например GetModuleFileName
(как предложил Шон)