2012-10-16 31 views
7

Vì vậy, tôi đang cố tạo một ứng dụng yêu cầu đọc các tập lệnh trong một thư mục con được gọi là "tập lệnh". Mã của tôi Tôi đang gặp sự cố với:
Directory.GetCurrentDirectory() không hoạt động trên linux?

string script = Console.ReadLine(); 
string path = Directory.GetCurrentDirectory(); 
string sciptpath = path + "/scripts/" + script; 

Điều này hoạt động tốt trên Windows. Nhưng trên Linux (chạy bằng cách sử dụng Mono Runtime) nó đi vào thư mục nhà người dùng hiện tại ... không phải là thư mục thực thi. Đây có phải là một lỗi? Và ai đó có thể đề xuất một cách giải quyết?

+0

Bạn đã kiểm tra khả năng tương thích Mono chống http://www.mono-project.com/Compatibility? Bạn cũng có thể thử công cụ Phân tích di chuyển Mono (MoMA) giúp xác định các vấn đề bạn có thể gặp khi chuyển ứng dụng .NET sang Mono (http://www.mono-project.com/MoMA). –

+0

Không phải vấn đề/câu hỏi của bạn, nhưng không nối các đường dẫn, sử dụng Path.Combine thay vì: string scriptpath = Path.Combine (path, "scripts", script); - nó sẽ hoạt động chính xác trên cả hai cửa sổ và linux. –

Trả lời

11

Nó không phải là nó cần "sửa chữa" nó là thư mục hiện tại không phải là những gì bạn nghĩ rằng nó được. Thư mục hiện tại là thư mục "đã tập trung" cho các đường dẫn tương đối. Bất kể EXE của bạn ở đâu, thư mục hiện tại của bạn có thể ở bất kỳ nơi nào khác hoặc thậm chí có thể thay đổi trong khi thực thi.

gì bạn muốn là:

string path = Path.GetDirectoryName(Application.ExecutablePath); 
+0

cảm ơn điều này đã làm việc tuyệt vời. Tôi thực sự chỉ phải làm Directory.SetCurrentDirectory (Path.GetDirectoryName (Application.ExecutablePath)); để khắc phục sự cố. Cảm ơn bạn rất nhiều! – user1750201

+1

Không sửa đổi thư mục hiện tại trừ khi bạn có lý do chính đáng để làm như vậy. –

+0

Theo nguyên tắc chung, bạn nên coi thư mục hiện tại là tài nguyên do người dùng kiểm soát và bạn nên sử dụng và/hoặc khi xử lý các yêu cầu do người dùng khởi tạo (ví dụ: mở tệp từ một số hộp thoại trong ứng dụng GUI). Và bạn chỉ nên sửa đổi nó khi người dùng mong đợi điều này. Khi bạn tự động tải các tệp bổ sung là một phần của ứng dụng, điều đó thường không hiển thị với người dùng hoặc ít nhất người dùng không nên bận tâm với nó. Do đó, tính toán đường dẫn dựa trên thư mục cài đặt của ứng dụng của bạn và không sử dụng thư mục hiện tại. –

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