Converting a URI path to a relative file system path in .NET

Have you already tried Server.MapPath?
or Uri.LocalPath property? Something like following :

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);
}

I figured out this way to produce a full absolute file system path from a relative or absolute URI and a base path.

With:

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

From a relative URI:

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

From an absolute URI:

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

You can do this:

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

See MSDN for details