#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"
.