Як дізнатися, в якому каталозі працює моя консольна програма з C #?
Як дізнатися, в якому каталозі працює моя консольна програма з C #?
Відповіді:
Щоб отримати каталог, де знаходиться файл .exe:
AppDomain.CurrentDomain.BaseDirectory
Щоб отримати поточний каталог:
Environment.CurrentDirectory
System.AppContext.BaseDirectory
.
Залежно від прав, наданих вашій програмі, чи діє тіньове копіювання чи ні, та інших варіантів виклику та розгортання, різні методи можуть працювати або давати різні результати, тому вам доведеться вибирати зброю з розумом. Сказавши це, все наведене дасть однаковий результат для повністю довіреної консольної програми, яка виконується локально на машині, де вона знаходиться:
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 );
Вам потрібно буде ознайомитися з документацією вищезазначених членів, щоб побачити точні необхідні дозволи.
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Розташування)
У .NET ви можете використовувати System.Environment.CurrentDirectory
каталог, з якого було запущено процес.
System.Reflection.Assembly.GetExecutingAssembly().Location
скаже вам місце розташування виконуваної в даний момент збірки (це цікаво лише в тому випадку, якщо виконувана в даний момент збірка завантажена з іншого місця, ніж місце збірки, де процес розпочався).
У вікнах (не впевнений щодо Unix тощо) це перший аргумент у командному рядку.
У першому елементі C / C ++ в argv *
WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)
Скажімо, ім’я вашого проекту додатка основної консолі .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 \
Використовуйте AppContext.BaseDirectory
для .net5.