Относительные пути в программах, работающих в режиме отладки [VS2010] - PullRequest
1 голос
/ 06 ноября 2010

Я сейчас отлаживаю программу в Visual C #, и в программе я получаю доступ к файлу, используя относительный путь.

  Stream s = File.Open("usr.dat", FileMode.OpenOrCreate);

В настоящее время он выплевывается в папку (папка проекта) / bin / x86 / Debug (где находится скомпилированный исполняемый файл). Есть ли способ изменить то, куда открывается относительный путь?

(Причина, по которой я хочу это сделать, заключается в том, что у меня есть несколько проектов, но я хочу, чтобы файл usr.dat был доступен для всех из них, поэтому, если у вас есть другое решение, я с удовольствием возьми).

РЕДАКТИРОВАТЬ: я обнаружил, что я могу просто изменить рабочий каталог проектов в свойствах. Спасибо за вклад, ребята

Ответы [ 3 ]

3 голосов
/ 06 ноября 2010

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

Просмотрите Environment.GetFolderPath (), чтобы найти одну из папок appdata, к которой у вас будет доступ для записи.

1 голос
/ 06 ноября 2010

Не используйте «текущий каталог» - это подход 1980-х годов, и он легко ломается (например, если вы используете диалог открытия файла, пользователь может оставить текущий каталог где угодно, пользователь может изменить текущий каталог при переходеваше приложение и т. д.).

Итак, чтобы узнать, с чего начать, вы можете использовать Application.StartupPath.

В Vista / Win7 вы не можете / не должны писатьгде-нибудь в программных файлах - поэтому используйте только путь относительно вашего .exe, если он предназначен только для чтения.В этом случае вы можете установить свои программы в «Program Files \ MyCompany \ ApplicationName» и установить общие файлы в «Program Files \ MyCompany \ Shared» и использовать Path.Combine (Path.GetDirectoryName (Path.GetDirectoryName (Application.StartupPath))), «Shared») в качестве папки для чтения общих файлов.

Если вы хотите записать в файл, то вам следует использовать папку «Мои документы» пользователя (для данных, видимых пользователю), илипапка Application Data (для внутренних данных вы хотите «спрятать» от пользователя).Используйте Environment.GetFolderPath () для доступа к этим путям (например, Environment.SpecialFolder.ApplicationData и т. Д.)

0 голосов
/ 06 ноября 2010

Текущее местоположение EXE-файла используется в качестве пути по умолчанию для файла, с которым вы работаете, потому что вы указали только имя файла.Если вы используете путь к файлу (строка, содержащая полную иерархию папок) перед именем файла, это должно помочь.

Возможно, вы захотите сохранить путь как отдельную строковую переменную и объединить его с файломназвание.Разделение пути на переменную также поможет вам проверить его в функциях File, таких как File.Exists ("path \ to \ your \ file \ file.ext")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...