Указание относительного пути

#c# #.net #winforms #directory #filepath

#c# #.net #winforms #каталог #путь к файлу

Вопрос:

У меня есть проект Windows forms. В текущем каталоге у меня есть папка справки с файлами *.chm. Какой самый простой способ запустить их из приложения? Как я могу указать относительный путь к ним?

Комментарии:

1. Под «текущим» каталогом вы подразумеваете «рабочий» каталог или «резидентный» каталог?

2. Я полагаю, это рабочий каталог.

3. попробуйте написать path: «Help/» filename

4. Это имя файла. Как я могу запустить этот файл?

5. если в std-программе: Обработать. Запустить(«Help/123.chm»);

Ответ №1:

Среда.Для свойства CurrentDirectory будет установлено местоположение вашего exe-файла. Итак, если вы поместите туда свою папку справки, это будет:

 // The path to the Help folder.
string directory = Path.Combine(Environment.CurrentDirectory, "Help"); 

// The path to the Help file.
string filePath = Path.Combine(directory , "myHelpFile.chm"); 

// Launch the Help file.
Process.Start(filePath); 
  

РЕДАКТИРОВАТЬ: Я должен сказать, что это Environment.CurrentDirectory указывает на папку, в которой процесс запущен по умолчанию в приложении Windows Forms, но его значение может быть изменено некоторыми элементами управления (например, OpenFileDialog — см. Здесь обходной путь) в течение срока службы вашего приложения. В службе Windows Environment.CurrentDirectory сопоставляется с %SystemDirectory% .

Комментарии:

1. Path.Combine может принимать > 2 параметров, поэтому вы могли бы просто сказать Path.Combine(Environment.CurrentDirectory, "Help", "myHelpFile.chm")

2. Окружающая среда. CurrentDirectory не является путем к приложению

3. @RichTea — Я никогда этого не осознавал. Только что просмотрел документы, и кажется, что в C # 4.0 появилась куча перегрузок. Спасибо, что указали на это!

Ответ №2:

Вам следует воспользоваться справкой.Покажите, как это сделать

 var chmFile = "CHM/test.chm";
Help.ShowHelp(ctrl, chmFile);
  

по умолчанию ShowHelp будет искать файл в пути к приложению

Ответ №3:

Я могу предложить два варианта, в зависимости от того, чего вы на самом деле. хотите. Первый заключается в получении пути к резидентному каталогу (где находятся исполняемые файлы), а второй касается текущего каталога (каталога, указанного для работы исполняемого файла):

Резидентный каталог:

 var path = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
  

Текущий каталог:

 var path = System.Environment.CurrentDirectory;
  

Существует также другой вариант, который, согласно документации gets the path for the executable file that started the application, not including the executable name :

 var path = Application.StartupPath;
  

Что касается построения вашего пути, другие ответы действительно очень хорошо это описывают.

Комментарии:

1. Правильный способ: AppDomain. CurrentDomain. Информация о настройке. База приложений

2. Спасибо. На самом деле мне нужен был резидентный каталог.

Ответ №4:

Самый простой

 Process.Start("myHelpFile.chm");
  

Это откроет chm файл в системной программе по умолчанию, связанной с этим типом файла.

Это будет работать до тех пор, пока файл chm находится в том же каталоге, что и ваш exe. Если у вас есть вложенная папка с именем help, путь будет @"HelpmyHelpFile.chm" .