2010-03-14 1 views
45

Как преобразовать абсолютный или относительный путь URI (например, /foo/bar.txt) в (соответствующий сегменту) путь относительной файловой системы (например, foo\bar.txt) в .NET?Преобразование пути URI к пути относительной файловой системы в .NET

Моя программа не является приложением ASP.NET.

+0

Это, возможно, было больше смысла для меня, чтобы использовать относительный путь URI в качестве примера. – acdx

ответ

4

Вы можете сделать это:

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

See MSDN for details

+2

Моя программа не является приложением ASP.NET, как мне получить доступ к объекту Server? – acdx

+0

@acdx - Я запутался тогда ... по отношению к чему, запущенному приложению? Ваш вопрос отмечен 'uri', поэтому я смущен, если это не веб-сайт, объясните? –

+0

Я хотел бы получить относительный путь к файлу, например 'foo \ bar.txt', который я могу передать' Path.Combine' для создания абсолютного пути к файлу. – acdx

74

Вы уже пробовали Server.MapPath?
или Uri.LocalPath Недвижимость? Что-то вроде следующего:

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

Это решение сработало для меня. –

+0

+1: Именно то, что я искал, спасибо. –

+0

@Binary, @Gareth, я рад, что помог вам. –

8

Я понял, таким образом, чтобы произвести полный абсолютный путь файловой системы от относительного или абсолютного URI и базового пути.

С:

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

С относительным URI:

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

От абсолютного URI:

// baseUri is a URI used to derive a relative URI 
Uri relativeUri = baseUri.MakeRelativeUri(absoluteUri); 
string filePath = new Uri(basePathUri, relativeUri).AbsolutePath;