2010-01-08 5 views
6

Nếu tôi có một tuyệt đối DirectoryInfo đường dẫn và một người họ hàng FileInfo con đường, làm thế nào tôi có thể kết hợp chúng thành một tuyệt đối FileInfo đường dẫn?Kết hợp một DirectoryInfo và một con đường FileInfo

Ví dụ:

var absoluteDir = new DirectoryInfo(@"c:\dir"); 
var relativeFile = new FileInfo(@"subdir\file"); 
var absoluteFile = new FileInfo(absoluteDir, relativeFile); //-> How to get this done? 

Trả lời

7

Nếu absoluteDir và relativeFile tồn tại với mục đích duy nhất là được sử dụng để tạo absoluteFile, sử dụng có lẽ nên gắn bó với các chuỗi đơn giản cho chúng và chỉ để lại absoluteFile như một FileInfo.

var absoluteDir = @"c:\dir"; 
var relativeFile = @"subdir\file"; 
var absoluteFile = new FileInfo(Path.Combine(absoluteDir, relativeFile)); 

Nếu nếu không bạn thực sự cần họ được đánh máy, sau đó bạn nên sử dụng Path.Combine áp dụng cho các OriginalPath của mỗi trong số họ, chẳng hạn như trong:

var absoluteDir = new DirectoryInfo(@"c:\dir"); 
var relativeFile = new FileInfo(@"subdir\file"); 
var absoluteFile = new FileInfo(Path.Combine(absoluteDir.OriginalPath), relativeFile.OriginalPath)); 
+1

Cảm ơn! Vì vậy, một cách rõ ràng, không có lớp thực để đóng gói đường dẫn hệ thống tệp trong thư viện lớp .NET. Nhân tiện: bạn không bỏ lỡ một lớp học như vậy? –

+0

Tôi không bỏ lỡ một lớp học, nhưng có thể là một quá tải constructor chấp nhận hai hoặc nhiều FileSystemInfo (lớp cơ sở của cả hai FileInfo và DirectoryInfo) hoặc chuỗi bằng cách sử dụng params. Các nhà xây dựng sau đó sẽ kết hợp tất cả. –

0

Hãy thử điều này:

Path.Combine(absolute, relative); 
0

Path.Combine?

+0

Điều này làm việc với DirectoryInfo và FileInfo , hoặc chỉ với chuỗi? –

+0

Chỉ các chuỗi; bạn không thể làm việc với 'dir.FullName' hoặc' file.FullName'? –

2

Bạn chỉ có thể sử dụng thuộc tính FullPath trên lớp FileInfo.

FileInfo.FullPath sẽ giúp bạn có được con đường đủ tiêu chuẩn đầy đủ, trong khi

FileInfo.OriginalPath sẽ cung cấp cho bạn đường dẫn tương đối cụ thể.

Nếu bạn chỉ muốn kết hợp với các đường khác nhau, ví dụ: tệp bạn muốn thêm đường dẫn tương đối vào đường dẫn anoter, sau đó bạn nên sử dụng Path.Combine() cho điều này, như đã nêu.