2010-06-01 31 views
19
string path = Path.GetDirectoryName(
        Assembly.GetAssembly(typeof(MyClass)).CodeBase); 

đầu ra:Làm thế nào tôi có thể loại bỏ 'file: \' Từ Value Return of Path.GetDirectoryName() trong C#

file: \ d: \ học \ cs \ test \ test. xml

gì là cách tốt nhất để trở lại chỉ d: \ học \ cs \ test \ test.xml

file:\\ sẽ ném ngoại lệ khi tôi gọi doc.Save(returnPath), tuy nhiên doc.Load(returnPath); hoạt động tốt. Cảm ơn bạn.

+0

có thể trùng lặp của [Có phương pháp Khuôn khổ .NET để chuyển đổi URI tệp thành đường dẫn có ký tự ổ đĩa không?] (Http://stackoverflow.com/questions/278761/is-there-a-net-framework-method- for-converting-file-uris-to-path-with-drive-le) – nawfal

Trả lời

14

Nếu bạn muốn thư mục của việc lắp ráp lớp đó, bạn có thể sử dụng thuộc tính Assembly.Location:

string path = Path.GetDirectoryName(Assembly.GetAssembly(typeof(MyClass)).Location); 

Mặc dù vậy, điều này hoàn toàn không giống với thuộc tính CodeBase. Location là "đường dẫn hoặc vị trí UNC của tệp được tải chứa tệp kê khai" trong khi CodeBase là "vị trí của hội đồng được chỉ định ban đầu, ví dụ: trong đối tượng AssemblyName".

+0

Cảm ơn giải pháp đơn giản nhưng hoàn hảo của bạn. @all, Cảm ơn bạn. –

+4

Vị trí là vị trí lắp ráp sau khi sao chép bóng, trong khi CodeBase là vị trí ban đầu, trước khi sao chép bóng xảy ra. Vì vậy, nếu sao chép bóng được kích hoạt, và bạn muốn vị trí ban đầu, người ta phải sử dụng CodeBase. –

2

tiếp cận đầu tiên của tôi sẽ là như thế này ...

path = path.Replace("file://", ""); 
+8

Trong khi điều này có thể trả lời câu hỏi trong tay cho OP, đây là một giải pháp kém. Lớp uri xử lý nhiều trường hợp góc hơn. – nawfal

+1

@nawfal - "Lớp uri xử lý nhiều trường hợp góc hơn" ... và nó cũng giới thiệu rất nhiều trường hợp góc của riêng nó. Ví dụ, nếu CodeBase cho assembly của bạn có trong file: /// c: /temp/#my_test#/WindowsFormsApplication1/WindowsFormsApplication1/bin/Debug/WindowsFormsApplication1.EXE và bạn truyền giá trị CodeBase đó tới hàm tạo Uri, bạn nhận được c : \\ temp cho uri.LocalPath. Các ký tự băm làm cho nó không hoạt động như mong muốn. – dcp

0

sử dụng phương pháp chuỗi chuỗi để lấy tên tập tin sau khi file: \

47
string path = new Uri(Assembly.GetAssembly(typeof(MyClass)).CodeBase).LocalPath; 
+6

Tôi muốn thêm rằng, trong khi giải pháp của Chris được đánh dấu là Câu trả lời, đó là giải pháp của Matthew đã cung cấp giải pháp đúng cho câu hỏi trong tiêu đề và cho vấn đề của tôi: Cách chuyển đổi đường dẫn tệp: // style thành một đường dẫn C: \ style. Cảm ơn Matthew! –

8
System.Uri uri = new System.Uri(Assembly.GetAssembly(typeof(MyClass)).CodeBase); 
    string path = Path.GetDirectoryName(uri.LocalPath); 
-3

Cách này thêm tên exe vào cuối (C: \ Thư mục \ project \ project \ bin \ debug \ myapp.exe \ xyz.txt).

Thay thế chuỗi là giải pháp an toàn nhất theo ý kiến ​​của tôi.

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