2014-02-01 5 views
2

Как указано в этом post рабочий каталог, когда я отладки мой SDL программа относительно .vcproj вместо EXE-файл (который он должен быть ИМО)Изменить текущий рабочий каталог VS13?

Так что я интересно, если есть в любом случае я могу это изменить , поэтому, когда я нажимаю F5, путь будет относиться к .exe, а не .vcproj? Текущее (относительно простое) обходное решение, которое я использую, просто открывает оттуда папку и программу запуска, но я бы предпочел просто нажать F5.

+0

Это не рабочий каталог по умолчанию, где находится EXE. Каталог отладки вашего проекта обычно. Вы не должны изменять это, это также значение по умолчанию, когда ваша программа запускается на машине пользователя. Но стоит проверить, чтобы ваша программа не бомбила, когда она не там, где вы надеетесь. Project + Свойства, Отладка, Настройка рабочего каталога. Убедитесь, что вы выдержали '$ (ProjectDir) ..' и 'C: \\'. Обратите внимание, что это обычно означает, что вы должны xcopy активы в каталог сборки. Событие после сборки. –

+0

@HansPassant Значение по умолчанию VS для рабочего каталога - '$ (ProjectDir)', а не каталог, в котором находится exe. –

+0

Вы правы. Измените его на $ (TargetDir). –

ответ

4

Наивный ответ на ваш вопрос, что вы можете установить Working Directory параметр в свойствах конфигурации Debugging к $(TargetDir). Значение по умолчанию: $(ProjectDir), и по умолчанию каталог проекта не находится там, где выводится исполняемый файл. Однако я не рекомендую вам воспользоваться этим вариантом, как я объясню ниже.

Вы пытаетесь решить это неправильно. Ваша основная проблема заключается в том, что вы предполагаете, что рабочий каталог совпадает с каталогом, который содержит исполняемый файл. Нет причин для этого, и вы не должны полагаться на это. Вы знаете, что файлы находятся в том же каталоге, что и исполняемый файл, поэтому вы должны искать там, а не рабочий каталог, который иногда бывает совпадающим, так же, как и исполняемый каталог.

Таким образом, вместо того, чтобы полагаться на invoker процесса, настраивая рабочий каталог по своему усмотрению, сделайте вашу программу независимой от рабочего каталога. Вы заявляете, что хотите работать с файлами, местоположение которых вы знаете относительно исполняемого каталога. Итак, есть ответ. Создавайте полные пути к вашим файлам, используя каталог, который содержит исполняемый файл в качестве базы.

Если вам нужно узнать местонахождение исполняемого файла, позвоните по номеру GetModuleFileName() и удалите имя файла. Остался каталог, содержащий ваш исполняемый файл. Объедините это с относительным путем ваших файлов, и ваш код теперь не зависит от рабочего каталога.

+0

Я немного смущен этим, когда я загружаю в SDL, я использую относительный путь, например «textures/mtex.png», и этот путь работает нормально, если я запускаю .EXE, но не если я использую F5, не могли бы вы уточнить ? Должен ли я использовать относительный путь? – PeppeJ

+0

Ваши файлы находятся в фиксированном месте относительно пути вашего исполняемого файла. Но вы пытаетесь загрузить их, указав относительный путь, который интерпретируется как относящийся к рабочему каталогу. Рабочий каталог не совпадает с исполняемым каталогом. Иногда, но шанс, они оказываются одинаковыми, но не всегда. Итак, поскольку ваши файлы находятся в фиксированном местоположении относительно пути вашего исполняемого файла, загрузите их таким образом. –

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