8903 / 4817 / 1883
Регистрация: 11.02.2013
Сообщений: 10,246
1

Как задать относительный путь к файлу?

13.10.2015, 11:41. Показов 2819. Ответов 5
Метки нет (Все метки)

Есть некий класс со статическим методом, выполняющим сериализацию объекта данного класса:
C#
1
2
3
4
5
6
7
private const string SETTINGS_FILENAME = @"settings.xml";
public static void Save(MouseSettings ms) {
    using (TextWriter tw = new StreamWriter(SETTINGS_FILENAME)) {
        XmlSerializer xs = new XmlSerializer(ms.GetType());
        xs.Serialize(tw, ms);
    }
}
До сегодняшнего утра всё работало, но вдруг, при переключении на окно дизайнера, в котором биндятся элементы к этому классу, начала вываливаться ошибка:
Сообщение об ошибке
System.UnauthorizedAccessException
Access to the path 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\settings.xml' is denied.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize, FileOptions options, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost)
at System.IO.StreamWriter.CreateFile(String path, Boolean append, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path, Boolean append, Encoding encoding, Int32 bufferSize, Boolean checkHost)
at System.IO.StreamWriter..ctor(String path)
at MouseRoute.Model.MouseSettings.Save(MouseSettings ms)
at MouseRoute.Model.MouseSettings.Finalize()

Т.е. относительный путь разворачивается в полный относительно IDE, а не проекта. Как быть?
Если метод Save закомментировать, то в дизайнере всё отображается.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.10.2015, 11:41
Ответы с готовыми решениями:

Относительный путь к файлу
Здравствуйте! Не подскажите как задать относительный путь к файлу? В программе через веб браузер...

Uri как загрузить если есть не полный а относительный путь
Загружаю картинку или видеофай, если дается полный путь то все работает, если относительный то...

Как добавить относительный путь файлов в ListBox, для открытия в PictureBox?
listBox1.Items.Clear(); //1 ...

Как правильно указать относительный путь к файлу?
Если открываю файл с именем "filename.ext", оно ищет "\filename.ext". как ону указать, где искать?...

5
Жуткая тВарЬ
389 / 325 / 134
Регистрация: 06.02.2015
Сообщений: 960
Записей в блоге: 1
13.10.2015, 12:31 2
Цитата Сообщение от ViterAlex Посмотреть сообщение
Как быть?
Использовать путь к рабочей директории приложения:
C#
1
AppDomain.CurrentDomain.BaseDirectory
0
1451 / 844 / 150
Регистрация: 06.06.2012
Сообщений: 2,370
13.10.2015, 12:42 3
Попробуйте запретить этому коду выполнение в дизайнере!

C#
1
2
3
4
5
6
7
8
9
10
private const string SETTINGS_FILENAME = @"settings.xml";
public static void Save(MouseSettings ms) {
  if(!DesignerProperties.GetIsInDesignMode(new DependencyObject()))
  {
    using (TextWriter tw = new StreamWriter(SETTINGS_FILENAME)) {
        XmlSerializer xs = new XmlSerializer(ms.GetType());
        xs.Serialize(tw, ms);
    }
  }
}
1
8903 / 4817 / 1883
Регистрация: 11.02.2013
Сообщений: 10,246
14.10.2015, 11:22  [ТС] 4
amarf, LeniumSoft, спасибо. Попробую. Но ведь работало и так! Понять бы почему перестало

Добавлено через 20 часов 10 минут
amarf, твой вариант привёл к тому, что форма в дизайнере вообще не появлялась.
LeniumSoft, поскольку я использую MVVM, то отключение делал в ViewModelLocator. В результате форма переставала отображаться.
В общем, пока не разрешил запись в папку 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ работать не хотело.
0
8903 / 4817 / 1883
Регистрация: 11.02.2013
Сообщений: 10,246
14.10.2015, 12:19  [ТС] 5
мда, решение оказалось костыльное. Если открыть проект в Blend, то он уже почему-то обращается к C:\WINDOWS\system32\settings.xml
собственно, вот весь проект. Кому не лень, проверьте у себя
Вложения
Тип файла: zip MouseRoute.zip (30.5 Кб, 3 просмотров)
0
8903 / 4817 / 1883
Регистрация: 11.02.2013
Сообщений: 10,246
14.10.2015, 12:38  [ТС] 6
Может это быть как-то связано с тем, что этот метод вызывается в деструкторе?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.10.2015, 12:38
Помогаю со студенческими работами здесь

Как изменить путь к файлу конфигурации
Добрый вечер! Столкнулся с проблемой. В общем задача такая. Пользователь задает имя конфига и...

Как вытянуть путь к файлу из ярлыка?
Подскажите, пожалуйста, как узнать куда указывает ярлык?

Как узнать путь к файлу класса
Как узнать путь к файлу класса?.

Как узнать путь к запущенному exe-файлу
Уже создавал тему, в которой обсуждалось использование Process.Start(); Вопрос такой. У меня есть...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru