Наивный ответ на ваш вопрос, что вы можете установить Working Directory параметр в свойствах конфигурации Debugging к $(TargetDir)
. Значение по умолчанию: $(ProjectDir)
, и по умолчанию каталог проекта не находится там, где выводится исполняемый файл. Однако я не рекомендую вам воспользоваться этим вариантом, как я объясню ниже.
Вы пытаетесь решить это неправильно. Ваша основная проблема заключается в том, что вы предполагаете, что рабочий каталог совпадает с каталогом, который содержит исполняемый файл. Нет причин для этого, и вы не должны полагаться на это. Вы знаете, что файлы находятся в том же каталоге, что и исполняемый файл, поэтому вы должны искать там, а не рабочий каталог, который иногда бывает совпадающим, так же, как и исполняемый каталог.
Таким образом, вместо того, чтобы полагаться на invoker процесса, настраивая рабочий каталог по своему усмотрению, сделайте вашу программу независимой от рабочего каталога. Вы заявляете, что хотите работать с файлами, местоположение которых вы знаете относительно исполняемого каталога. Итак, есть ответ. Создавайте полные пути к вашим файлам, используя каталог, который содержит исполняемый файл в качестве базы.
Если вам нужно узнать местонахождение исполняемого файла, позвоните по номеру GetModuleFileName()
и удалите имя файла. Остался каталог, содержащий ваш исполняемый файл. Объедините это с относительным путем ваших файлов, и ваш код теперь не зависит от рабочего каталога.
Это не рабочий каталог по умолчанию, где находится EXE. Каталог отладки вашего проекта обычно. Вы не должны изменять это, это также значение по умолчанию, когда ваша программа запускается на машине пользователя. Но стоит проверить, чтобы ваша программа не бомбила, когда она не там, где вы надеетесь. Project + Свойства, Отладка, Настройка рабочего каталога. Убедитесь, что вы выдержали '$ (ProjectDir) ..' и 'C: \\'. Обратите внимание, что это обычно означает, что вы должны xcopy активы в каталог сборки. Событие после сборки. –
@HansPassant Значение по умолчанию VS для рабочего каталога - '$ (ProjectDir)', а не каталог, в котором находится exe. –
Вы правы. Измените его на $ (TargetDir). –