Получить каталог приложений с помощью консольного приложения С#?
Я нашел что-то в google, но не работал над консольным приложением С#
Что я нашел:
string appPath = Path.GetDirectoryName(Application.ExecutablePath);
Как я могу получить каталог приложений с помощью консольного приложения С#?
Ответы
Ответ 1
Если вы все еще хотите использовать Application.ExecutablePath в консольном приложении, вам необходимо:
- Добавить ссылку на пространство имен System.Windows.Forms
-
Добавить System.Windows.Forms в раздел ваших приложений
using System;
using System.IO;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string appDirectory = Path.GetDirectoryName(Application.ExecutablePath);
Console.WriteLine(appDirectory);
}
}
}
Также вы можете использовать Directory.GetCurrentDirectory()
вместо Path.GetDirectoryName(Application.ExecutablePath)
и, следовательно, вам не понадобится ссылка на System.Windows.Forms.
Если вы не хотите включать ни пространства имен System.IO
, ни System.Windows.Forms
, тогда вы должны следовать ответу Reimeus.
Ответ 2
Приложение не доступно для консольных приложений, оно для оконных форм.
Чтобы получить рабочий каталог, вы можете использовать
Environment.CurrentDirectory
Также, чтобы получить каталог исполняемого файла, вы можете использовать:
AppDomain.CurrentDomain.BaseDirectory
Ответ 3
BEWARE, существует несколько методов и PITFALLS для путей.
-
Какое место вы занимаетесь? Рабочий каталог, каталог .EXE, каталог DLLs?
-
Вы хотите, чтобы код был переносимым, а также работает в консольном приложении?
-
Будет ли ваш код нарушен, если каталог имеет несогласованные конечные косые черты?
Давайте посмотрим на некоторые параметры:
Application.ExecutablePath
Требуется добавить ссылку и загрузить пространство имен приложения.
Directory.GetCurrentDirectory
Environment.CurrentDirectory
Если программа запускается с помощью ярлыка, реестра, диспетчера задач, это даст папку "В начало", которая может отличаться от местоположения .EXE.
AppDomain.CurrentDomain.BaseDirectory
В зависимости от того, как он запускается, влияет ли он на конечную косую черту. Это может сломать вещи, например GetDirectoryName() не считает, что косая черта не является файлом, и удалит последнюю часть.
Любая из этих рекомендаций является моей рекомендацией, работающей в приложениях Form и Console:
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
or
var AssemblyPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
При использовании в основной программе оба являются indentical. Если он используется в DLL, первый возвращает каталог .EXE, загружающий DLL, второй возвращает каталог DLL.
Ответ 4
Попробуйте Directory.GetCurrentDirectory