Относительные пути в Visual Studio

Я работаю в Visual Studio 2005 и добавил текстовый файл, который должен быть проанализирован путем щелчка правой кнопкой по проекту в проводнике решения и добавить-> новый объект. Это помещает .txt файл в папку проекта. Отладка .exe файл находится в/bin/debug папке.

Как я правильно указываю на txt файл из кода с помощью относительных путей, которые правильно разрешат быть двумя папками назад, также разрешая быть в той же папке после того, как решение будет опубликовано?

9
задан dbc 10 September 2019 в 03:35
поделиться

6 ответов

Проверьте Класс приложений. Это имеет несколько участников, которые могут использоваться для определения местоположения файлов, и т.д. относительно приложения, после того как это было установлено.

Например, Приложение. ExecutablePath говорит Вам, где рабочий EXE-файл расположен; Вы могли затем использовать относительный путь для нахождения файла, например..\FileToBeParsed.txt. Однако это предполагает, что файлы развертываются в той же структуре папок как структура папок проекта, которая обычно не имеет место.

Полагайте, что свойства как CommonAppDataPath и LocalUserAppDataPath определяют местоположение связанных с приложением файлов, после того как проект был развернут.

6
ответ дан 4 December 2019 в 07:49
поделиться

Если я понимаю Ваш вопрос правильно: Выберите файл в "Проводнике Решения". Под свойствами-> Копия для Вывода Каталога выбирайте "Копию Всегда" или "Копию если Более новый". Для действия сборки выберите "Содержание". Это скопирует файл в/bin/debug папку на сборке. Необходимо смочь сослаться на него от корня проекта с тех пор.

10
ответ дан 4 December 2019 в 07:49
поделиться

Я добавил бы шаг сборки сообщения, который копирует txt файл в выходную папку активной конфигурации:

xcopy "$(ProjectDir)*.txt" "$(OutDir)"

Существуют некоторые макросы, определенные такой как"$(ConfigurationName)", $(ProjectDir)

3
ответ дан 4 December 2019 в 07:49
поделиться

Альтернатива определению местоположения файла на диске должна была бы включать файл непосредственно в скомпилированный блок как встроенный ресурс. Чтобы сделать это, щелкните правой кнопкой по файлу и выберите "Embedded Resource" в качестве действия сборки. Можно затем получить файл как поток байтов:

Assembly thisAssembly = Assembly.GetExecutingAssembly();
Stream stream = thisAssembly.GetManifestResourceStream("Namespace.Folder.Filename.Ext");
byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);

Больше информации о встроенных ресурсах может быть найдено здесь и здесь.

Если Вы создаете приложение для своего собственного использования, предложение David Krep является лучшим: просто скопируйте файл в выходной каталог. При создании блока, который будет снова использован или распределил, то встроенная опция ресурса предпочтительна, потому что она упакует все в единственном .dll.

4
ответ дан 4 December 2019 в 07:49
поделиться

Можно добавить событие постсборки для копирования .txt файла в выходную папку сборки. Затем Ваш код может предположить, что файл находится в той же папке как исполняемый файл.

1
ответ дан 4 December 2019 в 07:49
поделиться

Перейдите в Свойства проекта -> Свойства конфигурации -> Отладка

Установите "Рабочий каталог" на $ ( TargetDir)

Затем вы можете правильно ссылаться на свой файл, используя относительный путь в вашем коде (например, ".... \ foo.xml")

2
ответ дан 4 December 2019 в 07:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: