2010-07-09 37 views
6

Nói rằng tôi có cấu trúc tập tin nàyCách lấy đường dẫn từ thư mục trong ứng dụng giao diện điều khiển C#?

Soultion-> FOLDER1 -> FileIwant.html

Vì vậy, đây có thể là một cái gì đó như C: \ soultion \ folder1 \ FilterIwant.html

Bây giờ tôi cần phải đọc tệp này vào ứng dụng của tôi. Tôi không thể chỉ mã hóa nó kể từ khi tôi đưa nó cho người khác mà họ có thể đặt nó trên ổ F: hay gì đó.

Hoặc khi tôi tạo tệp msi, đường dẫn có thể hoàn toàn khác. Vậy làm thế nào tôi có thể nói có lẽ mất

"FOLDER1 \ FilterIwant.html"

và sử dụng để có được đường dẫn thư mục không phân biệt nơi họ đặt nó?

Sửa

tôi đã cố gắng Path.GetFullPath nhưng tôi hạ cánh lên trong thư mục bin/debug. Nhưng tệp của tôi không nằm trong thư mục đó. Tôi nghĩ rằng nó là một vài thư mục trước đây. Ngoài ra nếu tôi thực hiện một tập tin msi tôi sẽ có thư mục bin/debug?

Trả lời

6

Tại sao là một tập tin được sử dụng như một phần của ứng dụng của bạn không nằm trong thư mục tương tự như các ứng dụng? Nó âm thanh với tôi như bạn nên thiết lập các thuộc tính trên tập tin đó để sao chép vào thư mục đầu ra khi bạn làm một xây dựng.

Làm như vậy sẽ đảm bảo tệp của bạn trong thư mục bin \ debug.

EDIT: hoặc đó hoặc bạn nên đặt tập tin của bạn trong một trong các thư mục đặc biệt, dữ liệu ứng dụng hoặc tài liệu của tôi mùa xuân đến tâm trí.

+0

Vâng, tôi chỉ muốn có công cụ của tôi trong một thư mục không bay xung quanh trong thùng rác ở đâu đó. – chobo2

+0

tốt và có lý do hợp lệ để thực hiện điều đó. đặc biệt trong môi trường bị khóa. vì vậy, tôi sẽ đề nghị xem xét cho các tập tin của bạn một ngôi nhà trong thư mục AppData ở đâu đó. –

1

Path.GetFullPath

Sửa

Các bin/Debug đường dẫn sẽ không có mặt khi bạn chạy ứng dụng cài đặt của bạn (trừ khi bạn nói với trình cài đặt để sử dụng thư mục con mà, tất nhiên).

+0

Đã thử điều đó. Con đường kết thúc trong bin/debug vì vậy tôi không chắc chắn phải làm gì sau đó. – chobo2

+0

Đã cập nhật câu trả lời cho phù hợp với câu hỏi được cập nhật. –

1

Bạn cần sự giúp đỡ của System.Io.Path lớp:

GetFullPath: Trả về đường dẫn tuyệt đối cho chuỗi đường dẫn cụ thể.

Sửa:

Bạn cũng có thể cần phải thư mục ứng dụng - đây là nơi mà ứng dụng của bạn sẽ được cài đặt:

string appPath = Path.GetDirectoryName(Application.ExecutablePath); 
0

Bạn có thể muốn vượt qua đường dẫn đầy đủ như một dòng lệnh tranh luận. Sau đó, bạn có thể lấy đối số bằng cách sử dụng thông số args của phương thức Main. Để chuyển đổi một đường dẫn tương đối đến một một tuyệt đối bạn có thể sử dụng Path.GetFullPath:

using System; 
using System.IO; 

public class CommandLine 
{ 
    public static void Main(string[] args) 
    { 
     // The path is passed as the first argument 
     string fileName = arg[0]; 

     // get absolute path 
     fileName = Path.GetFullPath(fileName); 

     // TODO: do whatever needs to done with the passed file name 
    } 

}

4

Khi Visual Studio biên dịch dự án của bạn, nó sẽ đưa đầu ra vào thư mục bin\debug. Bất kỳ tệp nội dung nào bạn muốn tham chiếu cũng phải được sao chép vào các vị trí đó, để ứng dụng của bạn nằm trong thư mục đó để có thể đọc tệp đó.

Bạn có hai lựa chọn:

  • hoặc là bạn thiết lập các Copy to Output Directory tài sản trên của bạn FilterIwant.html để Copy if newer; trong trường hợp đó, nếu các tập tin đã thay đổi, nó sẽ được sao chép vào thư mục đầu ra, và bạn sẽ có thể tham khảo nó và tải nó ở đó

hoặc

  • bạn chỉ cần xác định một con đường trong app.config của bạn, một cái gì đó như DataPath và đặt nó vào thư mục của bạn nơi tệp nằm. Từ ứng dụng của bạn, sau đó bạn tạo tên đường dẫn đầy đủ cho tệp đó là Path.Combine(AppSettings["DataPath"], "FilterIwant.html") - với cách tiếp cận này, bạn trở nên hoàn toàn độc lập với nơi tệp thực sự là và bạn không cần phải di chuyển bất kỳ thứ gì. Ngoài ra: điều này mang đến cho bạn cơ hội tạo tiện ích quản trị/cấu hình cho người dùng của mình sau này để họ có thể chọn bất kỳ thư mục nào họ thích và ứng dụng của bạn sẽ tìm thấy các tệp đó ở đó.
+0

Với phương pháp thứ hai, về cơ bản bạn phải thiết lập nó theo đúng đường dẫn mỗi khi bạn triển khai nó đúng? – chobo2

+0

@ chobo2: bạn phải thiết lập một lần cho mỗi lần cài đặt, vâng. Tuy nhiên, việc có một mục nhập cấu hình cũng cung cấp cho bạn khả năng cho phép người dùng cuối tự thay đổi, bằng cách sử dụng ví dụ: một tiện ích cấu hình. Nếu bạn mã hóa hành vi trong mã của mình, bạn không có khả năng đó –

2

Trong ứng dụng bảng điều khiển của mình, tôi bắt đầu với thư mục gỡ lỗi cho đến khi tôi tìm thấy thư mục mẹ gần nhất mà tôi muốn.

 static void Main(string[] args) 
     { 
      Console.WriteLine("Start"); 
      var debugDir = Environment.CurrentDirectory; 
      DirectoryInfo di = new DirectoryInfo(debugDir);    
      var searchDir = ""; 
      while (!di.FullName.ToLower().EndsWith("Folder1")) 
      { 
       if(di.FullName.ToLower().EndsWith(":")) //if you went too far up as in "D:" then 
        break; 
       di = di.Parent; 
      } 

      Console.WriteLine(di.FullName); 
} 
Các vấn đề liên quan