Tôi nên sử dụng AppDomain.CurrentDomain.BaseDirectory hay System.Enosystem.CurrentDirectory?


86

Tôi có hai tệp exe trong cùng một thư mục, tôi có thể chạy exe2 từ một nút trong exe1. Hôm nay tôi đang quan sát một khách hàng qua một phiên từ xa (dịch vụ đầu cuối) và exe2 không chạy được lỗi 'Không tìm thấy tệp', nhưng exe1 vẫn ở trong cùng một thư mục khi chúng tôi kiểm tra. Vì vậy, tôi nên sử dụng AppDomain.CurrentDomain.BaseDirectory hay System.Enosystem.CurrentDirectory ?

Cảm ơn


@Jade M Bạn đang thực thi exe1 của mình tại terminal như thế nào?
Cô Sonia

Tôi muốn thêm hai xu của mình bằng cách nói rằng nó string.GetFullPath(path)sử dụng Environment.CurrentDirectoryhơn là CurrentDomain.BaseDirectory, trước sự ngạc nhiên của tôi.
JBSnorro

Câu trả lời:


186

Nếu bạn muốn tìm các tập tin trong cùng thư mục với ứng dụng của mình, thì đó AppDomain.CurrentDomain.BaseDirectorylà lựa chọn chính xác.

Environment.CurrentDirectorylà một giá trị có thể và sẽ thay đổi trong quá trình chạy ứng dụng của bạn. Ví dụ: bằng cách sử dụng các tham số mặc định, OpenFileDialog trong WinForms sẽ thay đổi giá trị này thành thư mục nơi tệp được chọn từ đó.


Tôi đã sử dụng button1 để hiển thị OpenFileDialog, sau đó button2 để hiển thị Environment.CurrentDirectory, nhưng vẫn hiển thị thư mục gỡ lỗi, tại sao?
Lei Yang

18

AppDomain.CurrentDomain.BaseDirectorytrả về thư mục từ nơi miền ứng dụng hiện tại đã được tải.
System.Environment.CurrentDirectorytrả về thư mục hệ thống hiện tại.
Trong trường hợp của bạn AppDomain.CurrentDomain.BaseDirectorylà giải pháp tốt nhất.


1
Nói rõ hơn, System.Enosystem.CurrentDirectory trả về thư mục làm việc hiện tại (quy trình cụ thể) .
Oskar Berggren

14

Bạn nên sử dụng AppDomain.CurrentDomain.BaseDirectory.

Ví dụ trong ứng dụng dịch vụ windows:

System.Environment.CurrentDirectorysẽ trả về C: \ Windows \ system32

Trong khi

AppDomain.CurrentDomain.BaseDirectory sẽ trả về [Vị trí Application.exe]

Một yếu tố quan trọng khác cần lưu ý là AppDomain.CurrentDomain.BaseDirectorythuộc tính chỉ đọc trong khi Environment.CurrentDirectorycó thể là một thứ khác nếu cần:

// Change the directory to AppDomain.CurrentDomain.BaseDirectory
Environment.CurrentDirectory = AppDomain.CurrentDomain.BaseDirectory;   

6

Theo tôi hiểu thì bạn nên sử dụng BaseDirectory. CurrentDirectorycó thể thay đổi trong quá trình thực hiện chương trình.


3

Trong các dự án thử nghiệm Visual studio 2010, nếu bạn bật tùy chọn triển khai Chỉnh sửa cài đặt thử nghiệm, AppDomain.CurrentDomain.BaseDirectory trỏ đến thư mục TestResults \ Out (không phải bin \ debug). Mặc dù, cài đặt mặc định trỏ đến thư mục bin \ debug.

Ở đây tôi đã tìm thấy câu trả lời thuyết phục.

Tại sao AppDomain.CurrentDomain.BaseDirectory không chứa "bin" trong ứng dụng asp.net?


2

Tôi thường sử dụng một cái gì đó như:

            string AppPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
            AppPath = AppPath.Replace("file:\\", "");

2

Tôi cũng đã trải qua điều này vài ngày trở lại đây, vì tôi đã sử dụng

Environment.CurrentDirectory

vì nó đã gây cho tôi sự cố trên máy chủ sản xuất nhưng hoạt động tốt với máy chủ cục bộ của tôi,

Vì vậy, tôi đã thử với

System.AppDomain.CurrentDomain.BaseDirectory;

Và nó hiệu quả với tôi trong cả Môi trường.

Vì vậy, Như tất cả họ đã nói Chúng ta nên luôn đi với

System.AppDomain.CurrentDomain.BaseDirectory;

vì nó kiểm tra thư mục Tên miền hiện tại để tìm đường dẫn.

có một cái nhìn để biết thêm thông tin

Không thể tìm thấy một phần lỗi đường dẫn trên máy chủ

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 cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.