web-dev-qa-db-fra.com

Conversion d'un chemin URI en chemin de système de fichiers relatif dans .NET

Comment convertir un chemin URI absolu ou relatif (par exemple /foo/bar.txt) vers un chemin d'accès relatif au système de fichiers correspondant (par segment) (par exemple foo\bar.txt) dans .NET?

Mon programme n'est pas une application ASP.NET.

47
acdx

Avez-vous déjà essayé Server.MapPath?
ou Uri.LocalPath propriété? Quelque chose comme suivant:

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);
}
75
Ashish Gupta

J'ai trouvé cette façon de produire un chemin d'accès complet au système de fichiers absolu à partir d'un URI relatif ou absolu et d'un chemin de base.

Avec:

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

à partir d'un URI relatif:

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

à partir d'un URI absolu:

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

Tu peux le faire:

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

Voir MSDN pour plus de détails

5
Nick Craver