Làm cách nào để biết ứng dụng bảng điều khiển của tôi đang chạy trong thư mục nào?


91

Làm cách nào để tìm ra thư mục ứng dụng console của tôi đang chạy với C #?

Câu trả lời:


160

Để lấy thư mục chứa tệp .exe:

AppDomain.CurrentDomain.BaseDirectory

Để lấy thư mục hiện tại:

Environment.CurrentDirectory

2
Cảm ơn. Giúp khi C # .exe là trong một thư mục nhưng được gọi từ một thư mục khác (ví dụ: khi nó trên PATH hệ thống)
— DeepSpace101

14
Đối với .NET Core, nó là System.AppContext.BaseDirectory.
— NightOwl888

15

Tùy thuộc vào các quyền được cấp cho ứng dụng của bạn, việc sao chép bóng có hiệu lực hay không và các tùy chọn gọi và triển khai khác, các phương pháp khác nhau có thể hoạt động hoặc mang lại kết quả khác nhau, vì vậy bạn sẽ phải lựa chọn vũ khí của mình một cách khôn ngoan. Phải nói rằng, tất cả những điều sau đây sẽ mang lại cùng một kết quả cho một ứng dụng bảng điều khiển hoàn toàn đáng tin cậy được thực thi cục bộ tại máy nơi nó cư trú:

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 );

Bạn sẽ cần phải tham khảo tài liệu của các thành viên ở trên để xem các quyền chính xác cần thiết.



3

Trong .NET, bạn có thể sử dụng System.Environment.CurrentDirectoryđể lấy thư mục mà từ đó quá trình được bắt đầu.
System.Reflection.Assembly.GetExecutingAssembly().Locationsẽ cho bạn biết vị trí của assembly hiện đang thực thi (điều đó chỉ thú vị nếu assembly đang thực thi được tải từ một nơi khác với vị trí của assembly nơi quá trình bắt đầu).


1

Trên windows (không chắc chắn về Unix, v.v.), nó là đối số đầu tiên trong dòng lệnh.

Trong C / C ++, mục firts trong argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Vâng, nó cũng giống như vậy trong .NET. Đối số đầu tiên luôn là đường dẫn đầy đủ của tệp thực thi.
— Adam Neal

1

Application.StartUpPath;


quan tâm đến liên kết đến một số tài liệu?
— John Sheehan

0

Giả sử tên dự án ứng dụng bảng điều khiển lõi .Net của bạn là DataPrep.

Nhận thư mục cơ sở dự án:

Console.WriteLine(Environment.CurrentDirectory);

Đầu ra: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

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

Đầu ra: ~ DataPrep \


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookie và Chính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.