2010-03-14 52 views
45

Làm cách nào để chuyển đổi đường dẫn URI tuyệt đối hoặc tương đối (ví dụ: /foo/bar.txt) sang đường dẫn hệ thống tệp tương đối (phân đoạn) tương ứng (ví dụ: foo\bar.txt) trong .NET?Chuyển đổi đường dẫn URI sang đường dẫn hệ thống tệp tương đối trong .NET

Chương trình của tôi không phải là ứng dụng ASP.NET.

+0

Nó có thể đã thực hiện có ý nghĩa hơn đối với tôi để sử dụng một đường dẫn URI tương đối làm ví dụ. – acdx

Trả lời

4

Bạn có thể làm điều này:

var localPath = Server.MapPath("/foo/bar.txt"); 

See MSDN for details

+2

Chương trình của tôi không phải là một ứng dụng ASP.NET, làm cách nào để truy cập vào đối tượng Máy chủ? – acdx

+0

@acdx - Tôi bối rối rồi ... liên quan đến cái gì, một ứng dụng đang chạy? Câu hỏi của bạn được gắn thẻ 'uri', vì vậy tôi nhầm lẫn nếu nó không phải là web, giải thích? –

+0

Tôi muốn lấy đường dẫn tệp tương đối, chẳng hạn như 'foo \ bar.txt', để tôi có thể chuyển đến' Path.Combine' để tạo đường dẫn tệp tuyệt đối. – acdx

74

Bạn đã đã cố gắng Server.MapPath?
hoặc Uri.LocalPath tài sản? Nội dung nào đó như sau:

string uriString = "file://server/filename.ext"; 
// Lesson learnt - always check for a valid URI 
if(Uri.IsWellFormedUriString(uriString)) 
{ 
    Uri uri = new Uri(uriString); 
    Console.WriteLine(uri.LocalPath); 
} 
+0

Giải pháp này làm việc cho tôi. –

+0

+1: Chính xác những gì tôi đang tìm kiếm, cảm ơn. –

+0

@Binary, @Gareth, tôi rất vui vì đã giúp bạn. –

8

Tôi đã tìm ra cách này để tạo đường dẫn hệ thống tệp tuyệt đối đầy đủ từ URI tương đối hoặc tuyệt đối và đường dẫn cơ sở.

Với:

Uri basePathUri = new Uri(@"C:\abc\"); 

Từ một URI tương đối:

string filePath = new Uri(basePathUri, relativeUri).AbsolutePath; 

Từ một URI tuyệt đối:

// baseUri is a URI used to derive a relative URI 
Uri relativeUri = baseUri.MakeRelativeUri(absoluteUri); 
string filePath = new Uri(basePathUri, relativeUri).AbsolutePath; 
Các vấn đề liên quan