Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/64: Рейтинг темы: голосов - 64, средняя оценка - 4.64
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191

Относительный путь к файлу

16.08.2017, 10:31. Показов 12156. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Не подскажите как задать относительный путь к файлу? В программе через веб браузер открывается pdf файл таим образом:
C#
1
2
            var directory = new Uri("file:///C:/Users/adm/Documents/Work/2017/Programming/INES%20v01/INES_Wpf%20v87/INES_Wpf_v01/INES_Wpf_v01/bin/Debug/INES-2008-R_web.pdf", UriKind.Absolute);
            WebBrowserINES.Navigate(directory);
Собираюсь делать инсталятор этой программы для установки на других машинах (в том числе без установленной студии). Поэтому необходимо использовать именно относительный путь к файлу. Был бы очень благодарен за помощь!
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
16.08.2017, 10:31
Ответы с готовыми решениями:

Как задать относительный путь к файлу?
Есть некий класс со статическим методом, выполняющим сериализацию объекта данного класса: private const string SETTINGS_FILENAME =...

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

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

8
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,403
Записей в блоге: 14
16.08.2017, 10:58
Смотрите методы классов Environment, Path, DirectoryInfo, FileInfo.
Один из способов получить путь к exe:
C#
1
2
3
4
5
6
7
8
        private string GetExeDirectory()
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            path = Path.GetDirectoryName(path);
            return path;
        }
Дальше Path.Combine() и пр.
Относительные пути никогда не используйте. Только полные, составленные программно.
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
16.08.2017, 11:30  [ТС]
Спасибо!
Почему то у меня в таком коде не открывается pdf файл:
C#
1
            WebBrowserINES.Navigate(new Uri(System.IO.Path.Combine(GetExeDirectory(), "/INES-2008-R_web.pdf"), UriKind.Relative));
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,403
Записей в блоге: 14
16.08.2017, 12:44
Посмотрите в отладчике то значение, которое получается после манипуляций и убедитесь, что оно верное.
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
16.08.2017, 13:08  [ТС]
Проблема возможно в том, что изначально работающий путь к файлу выглядел так: C:/Users/adm/Documents/Work/2017/Programming/INES%20v01/INES_Wpf%20v87/INES_Wpf_v01/INES_Wpf_v01/bin/Debug/INES-2008-R_web.pdf.
А функция GetExeDirectory() дает путь к exe файлу, но сам путь выглядит так: C:\Users\adm\Documents\Work\2017\Program ming\INES%20v01\INES_Wpf%20v87\INES_Wpf_ v01\INES_Wpf_v01\bin\Debug\.
Т.е. с обратной косой чертой. Возможно проблемма имеенно в этом?
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,403
Записей в блоге: 14
16.08.2017, 13:47
Возможно. Вот так можно вернуть путь в ваш вид:
C#
1
2
var uri2 = new System.Uri(path);
var converted = uri2.AbsoluteUri;
0
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
16.08.2017, 19:04  [ТС]
Прошу прощения, но всеже не открывается pdf файл.
Приведу тот код который Вы мне порекомендовали и как он у меня сейчас выглядит:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            WebBrowserINES.Navigate(new Uri(System.IO.Path.Combine(GetExeDirectory(), "/INES-2008-R_web.pdf"), UriKind.Absolute));
        }
 
        private string GetExeDirectory()
        {
            string codeBase = Assembly.GetExecutingAssembly().CodeBase;
            UriBuilder uri = new UriBuilder(codeBase);
            string path = Uri.UnescapeDataString(uri.Path);
            path = System.IO.Path.GetDirectoryName(path);
 
            var uri2 = new Uri(path);
            var converted = uri2.AbsoluteUri;
 
            return converted;
        }
Не понимаю пока, почему файл не открывается, т.к. путь к нему правильный
0
Эксперт .NET
 Аватар для Rius
13114 / 7675 / 1674
Регистрация: 25.05.2015
Сообщений: 23,403
Записей в блоге: 14
16.08.2017, 19:17
Лучший ответ Сообщение было отмечено BenWade как решение

Решение

Вы же даже отладчиком не попытались посмотреть выполнение программы, да?

C#
1
2
3
4
    var dir = GetExeDirectory();
    var uri = new Uri(System.IO.Path.Combine(dir, "INES-2008-R_web.pdf"));
    //var uriAbs = uri.AbsoluteUri;
    WebBrowserINES.Navigate(uri);
C#
1
2
3
4
5
6
7
8
static private string GetExeDirectory()
{
    string codeBase = Assembly.GetExecutingAssembly().CodeBase;
    UriBuilder uri = new UriBuilder(codeBase);
    string path = Uri.UnescapeDataString(uri.Path);
    path = System.IO.Path.GetDirectoryName(path);
    return path;
}
1
2 / 2 / 1
Регистрация: 05.03.2015
Сообщений: 191
17.08.2017, 10:05  [ТС]
Спасибо!
Привык пользоваться выводом сообщений со значениями переменных на экран (MessageBox)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.08.2017, 10:05
Помогаю со студенческими работами здесь

Получить путь к файлу из TreeView
Есть TreeView - выводит файлы и папки, как получить путь путь к файлу или папке кликнув на него в treeview?

Не удается указать путь к файлу
Есть такой вот путь string text =...

Получить путь к файлу при перетаскивании на форму
Как при перетаскивании файла на форму получить его путь?

[WPF] Нужно указать правильный путь к файлу, который находится в папке внутри решения
Звуковой файл находится в папке внутри решения (смотри на фотографии) (Resources/Sounds/Sound1.wav). Нужно воспроизвести его при помощи...

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


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru