2009-03-23 41 views
66

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 đã 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 'File not found', nhưng exe1 nằm trong cùng thư mục khi chúng ta kiểm tra. Vậy tôi có nên sử dụng AppDomain.CurrentDomain.BaseDirectory hoặc System.Environment.CurrentDirectory không?Tôi có nên sử dụng AppDomain.CurrentDomain.BaseDirectory hoặc System.Environment.CurrentDirectory không?

Cảm ơn

+0

@Jade M How are you thực hiện exe1 của bạn tại nhà ga? –

+0

Tôi muốn thêm hai xu của mình bằng cách nói rằng 'string.GetFullPath (đường dẫn)' sử dụng 'Environment.CurrentDirectory' thay vì' CurrentDomain.BaseDirectory', làm tôi ngạc nhiên. – JBSnorro

Trả lời

6

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

145

Nếu bạn muốn tìm tệp trong cùng thư mục với ứng dụng của mình, AppDomain.CurrentDomain.BaseDirectory là lựa chọn đúng.

Environment.CurrentDirectory là giá trị có thể và sẽ thay đổi trong suốt 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 mà tệp được chọn từ đó.

+6

Tôi ước tôi có thể bầu bạn nhiều lần trong lần này. – David

+0

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? –

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:\\", ""); 
14

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

+1

Để rõ ràng, System.Environment.CurrentDirectory trả về thư mục _working_ hiện tại (quy trình cụ thể). –

3

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

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

Why AppDomain.CurrentDomain.BaseDirectory not contains "bin" in asp.net app?

10

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

Ví dụ trong một ứng dụng dịch vụ cửa sổ:

System.Environment.CurrentDirectory sẽ trở lại C: \ Windows \ system32

Trong khi

AppDomain.CurrentDomain.BaseDirectory sẽ trở lại [Application.vị trí exe]

Một yếu tố quan trọng cần lưu ý là AppDomain.CurrentDomain.BaseDirectory là một tài sản chỉ đọc trong khi Environment.CurrentDirectory có thể là cái gì khác nếu cần thiết:

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

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

Environment.CurrentDirectory 

như nó đã đem lại cho tôi vấn đề trên máy chủ sản xuất nhưng đã làm việc tốt với máy chủ địa phương của tôi,

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

System.AppDomain.CurrentDomain.BaseDirectory; 

Và nó đã làm việc cho tôi trong cả Môi trường.

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

System.AppDomain.CurrentDomain.BaseDirectory; 

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

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

Could not find a part of path error on server

Các vấn đề liên quan