Як дізнатись, у якому каталозі працює моя консольна програма?


Відповіді:


161

Щоб отримати каталог, де знаходиться файл .exe:

AppDomain.CurrentDomain.BaseDirectory

Щоб отримати поточний каталог:

Environment.CurrentDirectory

2
Дякую. Допомагає, коли C # .exe знаходиться в одній папці, але викликається з іншої папки (наприклад: коли він знаходиться в системному PATH)
DeepSpace101

14
Для .NET Core це так System.AppContext.BaseDirectory.
NightOwl888

15

Залежно від прав, наданих вашій програмі, чи діє тіньове копіювання чи ні, та інших варіантів виклику та розгортання, різні методи можуть працювати або давати різні результати, тому вам доведеться вибирати зброю з розумом. Сказавши це, все наведене дасть однаковий результат для повністю довіреної консольної програми, яка виконується локально на машині, де вона знаходиться:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

Вам потрібно буде ознайомитися з документацією вищезазначених членів, щоб побачити точні необхідні дозволи.



3

У .NET ви можете використовувати System.Environment.CurrentDirectoryкаталог, з якого було запущено процес.
System.Reflection.Assembly.GetExecutingAssembly().Locationскаже вам місце розташування виконуваної в даний момент збірки (це цікаво лише в тому випадку, якщо виконувана в даний момент збірка завантажена з іншого місця, ніж місце збірки, де процес розпочався).


1

У вікнах (не впевнений щодо Unix тощо) це перший аргумент у командному рядку.

У першому елементі C / C ++ в argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Так, це те ж саме і в .NET. Перший аргумент - це завжди повний шлях до виконуваного файлу.
Адам Ніл,

1

Application.StartUpPath;


дбати про посилання на якусь документацію?
Джон Шихан,

0

Скажімо, ім’я вашого проекту додатка основної консолі .Net - DataPrep.

Отримати базовий каталог проекту:

Console.WriteLine(Environment.CurrentDirectory);

Вихідні дані: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

Вихід: ~ DataPrep \


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.