2012-01-04 3 views
2

У меня есть проект (собственный C++, скомпилированный в .exe), который отлично работает за пределами VS 2010, но внутри VS (с или без отладчика) он застревает пытаясь найти текстовый файл, расположенный в той же папке bin, что и он.Текстовый файл найден только при работе за пределами Visual Studio

Любые идеи относительно того, почему это произойдет? Моя догадка заключается в том, что VS разбирается с тем, где выглядит код при попытке открыть файл, но я не знаю достаточно деталей, чтобы исправить это.

Некоторые детали:

Мой .exe вызывает функцию из .dll я писал ранее, что, в свою очередь, пытается найти текстовый файл с указанием параметров этой функции. Для удобства я поместил все эти файлы в одну и ту же папку, поэтому поиск текстового файла не будет проблемой.

Перед открытием файла, функция проверяет, что она существует с помощью:

PersistentAssert(Utility::FileExists(Filename), "Parameter file not found"); 

В VS 2010 эта строка вызывает «Параметр файл не найден» для отображения, но за пределами VS программа удается найти файл ,

ответ

4

При запуске исполняемого файла из visual studio по умолчанию он использует каталог файлов проекта в качестве текущего рабочего каталога. Вы можете изменить его в Configuration Properties -> Debugging -> Working Directory.

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

+0

Вау, еще более явный ответ. Я должен чаще задавать вопросы по этим тегам ... – zergylord

1

Процессы имеют концепцию «текущего каталога», которая может быть или не быть тем же самым каталогом, где находится файл .exe. Похоже, что когда вы запускаете свою программу внутри VS, текущий каталог - это нечто иное, чем ваш .exe.

Где-то в настройках проекта должно быть место, где вы можете выбрать, какой каталог будет текущим каталогом, когда ваша программа запустится внутри отладчика. Установите это в том же месте, что и ваш .exe, и вам должно быть хорошо.

+0

Это было именно так - быстрый ответ SO. Thankies! – zergylord

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