2010-04-07 25 views
13

tôi cần để có được những đường dẫn (không thực thi), nơi ứng dụng của tôi đang chạy từ:Thư mục thực thi mà ứng dụng đang chạy từ đâu?

System.AppDomain.CurrentDomain.BaseDirectory() 

Khi tôi chạy tuyên bố trên với & "/images/image.jpg" trên máy tính địa phương của tôi nó hoạt động tốt nhưng khi tôi cài đặt ứng dụng trên một máy khác, nó nói rằng nó không thể tìm thấy tệp và có rất nhiều thông tin đường dẫn bổ sung.

Tôi chỉ cần thư mục nơi ứng dụng đang chạy. Tôi đang viết mã bằng VB.NET với Visual Studio 2008.

Cảm ơn!

+0

không biết nhiều về vs 2008 nhưng khi bạn làm một dirinfo dont bạn nhận được dirinfo từ nơi ứng dụng. đang chạy? – Grumpy

+0

Có thể trùng lặp của [Nhận chương trình đường dẫn?] (Http://stackoverflow.com/questions/2216141/get-programs-path) –

Trả lời

26
Dim strPath As String = System.IO.Path.GetDirectoryName(_ 
    System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 

Taken từ HOW TO: Determine the Executing Application's Path (MSDN)

+6

strPath chứa ** tệp **: \\ c: \\ xxxxxx – Kraken101

+0

Điều này không an toàn, ví dụ khi nó đang được sử dụng để mở tệp cấu hình, nó gây ra 'System.Configuration.ConfigurationErrorsException: Đã xảy ra lỗi khi tải tệp cấu hình: Định dạng URI không được hỗ trợ' –

+0

Câu trả lời của MrCalvin hoạt động tốt trong trường hợp đó –

0

Bạn có thể viết như sau:

Path.Combine(Path.GetParentDirectory(GetType(MyClass).Assembly.Location), "Images\image.jpg") 
+1

Có những cạm bẫy cho cách tiếp cận này vì lắp ráp không nhất thiết phải nằm trong cùng một thư mục như thực thi hội,, tổ hợp. –

4

Bạn có thể sử dụng tĩnh StartupPath tài sản của lớp Application.

12
Dim P As String = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().CodeBase) 
P = New Uri(P).LocalPath 
20

Đây là bài đăng đầu tiên trên google vì vậy tôi nghĩ mình sẽ đăng các cách khác nhau có sẵn và cách chúng so sánh. Thật không may tôi không thể tìm ra cách để tạo ra một bảng ở đây, vì vậy nó là một hình ảnh. Mã cho mỗi bên dưới hình ảnh sử dụng tên đủ điều kiện.

enter image description here

My.Application.Info.DirectoryPath 

Environment.CurrentDirectory 

System.Windows.Forms.Application.StartupPath 

AppDomain.CurrentDomain.BaseDirectory 

System.Reflection.Assembly.GetExecutingAssembly.Location 

System.Reflection.Assembly.GetExecutingAssembly.CodeBase 

New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase) 

Path.GetDirectoryName(Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path))) 

Uri.UnescapeDataString((New System.UriBuilder(System.Reflection.Assembly.GetExecutingAssembly.CodeBase).Path)) 
6

tôi cần phải biết điều này và đến đây, trước khi tôi nhớ lại lớp Môi trường.

Trong trường hợp bất kỳ ai khác gặp sự cố này, chỉ cần sử dụng điều này: Environment.CurrentDirectory.

Ví dụ:

Dim dataDirectory As String = String.Format("{0}\Data\", Environment.CurrentDirectory) 

Khi chạy từ Visual Studio trong yeilds chế độ gỡ lỗi:

C:\Development\solution folder\application folder\bin\debug 

Đây là hành vi chính xác tôi cần, và nó đơn giản và dễ hiểu đủ.

+1

Giải pháp nhỏ nhất, dễ nhất, với định dạng! 1, cảm ơn. – rdtsc

+0

Có, trợ giúp này giúp ứng dụng thực sự di động, bằng cách giữ tệp cài đặt trong đường dẫn gốc của ứng dụng. Cảm ơn các giải pháp đơn giản! –

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