2011-01-19 295 views
8

Tôi có chương trình dòng lệnh lấy tệp cấu hình làm tham số, nghĩa là, C: \ myprogram.exe -c C: \ configFiles \ MyConfigFile.txt. Tôi muốn có thể tạo nó để tôi không phải nhập đường dẫn tuyệt đối vào tệp cấu hình, vì vậy thay vì ở trên tôi chỉ có thể nhập C: \ myprogram.exe -c MyConfigFile.txtĐường dẫn tương đối đến tệp bằng C#

Tôi không quen thuộc với cách C# giao dịch với các đường dẫn để hiểu xem liệu cách này có thể được thực hiện hay không. Bất kỳ cái nhìn sâu sắc được đánh giá cao.

+0

có thể trùng lặp của [Làm cách nào để chuyển đổi đường dẫn tương đối thành đường dẫn đủ điều kiện trong C#/.NET?] (Http://stackoverflow.com/questions/2162292/how-do-i-convert-a-relative đường dẫn-đầy-đủ-điều kiện-trong-c-net) – finnw

Trả lời

12

Sử dụng Path.GetFullPath()

Cái gì như:

string path = "MyConfigFile.txt"; 
string fullPath = System.IO.Path.GetFullPath(path); 

Đó là nếu tập tin cấu hình là trong thư mục hiện hành. Nếu chúng được lưu trữ trong thư mục chuẩn, bạn có thể sử dụng Path.Combine()

string basePath = "C:\Configs"; 
string file = "MyConfigFile.txt"; 
string fullPath = System.IO.Path.Combine(basePath, file); 
+2

điều này có đường dẫn tuyệt đối, chứ không phải đường dẫn tương đối. – dopatraman

+0

@codeninja Có, nhưng đó là một đường dẫn tuyệt đối được xác định tại thời gian chạy _relative_ đến thư mục hiện tại, giống như System.Path luôn làm; [từ MSDN:] (http://msdn.microsoft.com/en-us/library/system.io.path.aspx) 'vị trí hiện tại được sử dụng làm điểm bắt đầu khi định vị tệp được chỉ định bằng đường dẫn tương đối. ' Ngoài ra, từ cùng một bài viết:' Để xác định thư mục hiện tại, hãy gọi Directory.GetCurrentDirectory.' – brichins

4

Bạn chỉ chuyển một chuỗi. Đó là vào bạn để xử lý nó theo một cách đường dẫn tương đối.

Nếu bạn sử dụng mã này, nó sẽ theo mặc định hỗ trợ đường dẫn tương đối.

FileInfo sẽ cố gắng sử dụng đường dẫn trong Environment.CurrentDirectory trước tiên, nếu đường dẫn được cung cấp không rõ ràng.

var file = new FileInfo(args[1]); // args[1] can be a filename of a local file 
Console.WriteLine(file.FullName); // Would show the full path to the file 
0

Các lớp .NET chuẩn đang hoạt động với đường dẫn tương đối giống như tuyệt đối, vì vậy, bạn có thể sử dụng chúng mà không gặp bất kỳ sự cố nào. Nếu C: root là thư mục làm việc của chương trình, bạn có thể sử dụng c:\myprogram.exe -c configFiles\MyConfigFile.txt và nó sẽ trỏ đến c:\configFiles\MyConfigFile.txt.

0

Nếu không có đường dẫn tương đối như là một phần của các đối số đầu vào, ứng dụng của bạn sẽ cần phải:

  • hoặc tìm kiếm các tập tin đó được truyền trong
  • thêm tên đường dẫn của thư mục Config để tên tập tin
2

Bạn có một số tùy chọn chung:

  • Store pat thư mục h trong tệp cấu hình (bạn đã nói bạn không muốn làm điều này)
  • Yêu cầu người dùng nhập đường dẫn tương đối (.... \ MyFile.txt)
  • Tìm kiếm theo cách lập trình cho các tệp khớp với tên (rất chậm và dễ bị định vị nhiều file cùng tên)
  • Giả sử các tập tin dữ liệu trong thư mục thực hiện

Bất kỳ cách nào bạn cắt nó, người sử dụng phải ghi rõ đường dẫn đến thư mục, có thể là trong cấu hình tệp, nhập đường dẫn tương đối hoặc chọn từ danh sách tệp có tên giống hệt nhau được tìm thấy trong các thư mục khác nhau.

ANALOGY: Bạn đặt sách giáo khoa trong tủ khóa, ở đâu đó trong trường học. Bạn yêu cầu bạn bè của bạn để có được những cuốn sách từ "một thay đồ", mà không gợi ý là chính xác mà tủ có thể được.Bạn sẽ chờ đợi một thời gian rất dài và kết thúc với 50 cuốn sách tương tự. Hoặc, cung cấp một đầu mối về hành lang, ngân hàng của tủ khóa và/hoặc số tủ khóa trong đó sách có thể được lưu trữ. Sự mơ hồ của manh mối của bạn tương quan trực tiếp với thời gian phản hồi và khả năng trả lại nhiều khả năng.

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