web-dev-qa-db-fra.com

Chemin relatif vers le chemin absolu en C #?

J'ai des fichiers XML qui contiennent des chemins de fichiers href vers des images (par exemple, "....\images\image.jpg"). Les hrefs contiennent des chemins relatifs. Maintenant, je dois extraire les hrefs des images et les transformer en chemins absolus dans le système de fichiers.

Je connais la méthode GetFullPath, mais je l'ai essayée et elle semble fonctionner uniquement à partir du jeu CurrentDirectory, qui semble être C: donc je ne vois pas comment je pourrais l'utiliser. Et toujours, j'ai le chemin absolu du fichier contenant les hrefs et les chemins relatifs href, donc comme c’est une tâche simple pour moi de compter le nombre de pièces ".... \" en fonction du chemin absolu le fichier contenant, il semble qu'il doit y avoir un moyen de le faire aussi par programme.

J'espère qu'il existe une méthode simple que je ne connais pas! Des idées?

65
Anders

En supposant que vous connaissiez le répertoire réel dans lequel le fichier XML est utilisé, Path.Combine, par exemple.

var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg");

Si vous voulez récupérer le chemin complet avec tout .. réduit, vous pouvez utiliser:

Path.GetFullPath((new Uri(absolute_path)).LocalPath);
85
Paolo
string exactPath = Path.GetFullPath(yourRelativePath);

travaux

100
cahit beyaz

Cela a fonctionné.

var s = Path.Combine(@"C:\some\location", @"..\other\file.txt");
s = Path.GetFullPath(s);
29
David Crowell

Avez-vous essayé Server.MapPath method. Voici un exemple

string relative_path = "/Content/img/Upload/Reports/59/44A0446_59-1.jpg";
string absolute_path = Server.MapPath(relative_path);
//will be c:\users\.....\Content\img\Upload\Reports\59\44A0446_59-1.jpg
5
Tianzhen Lin

Vous pouvez utiliser Path.Combine avec le chemin "base", puis GetFullPath sur les résultats.

string absPathContainingHrefs = GetAbsolutePath(); // Get the "base" path
string fullPath = Path.Combine(absPathContainingHrefs, @"..\..\images\image.jpg");
fullPath = Path.GetFullPath(fullPath);  // Will turn the above into a proper abs path
3
Reed Copsey

C'est le meilleur moyen de convertir le chemin relatif en chemin absolu!

string absolutePath = System.IO.Path.GetFullPath(relativePath);
2

Cela a fonctionné pour moi.

//used in an ASP.NET MVC app
private const string BatchFilePath = "/MyBatchFileDirectory/Mybatchfiles.bat"; 
var batchFile = HttpContext.Current.Server.MapPath(BatchFilePath);
0
Jonny Boy

Jetez un coup d’œil à Path.Combinehttp://msdn.Microsoft.com/en-us/library/fyy7a5kt.aspx

0
JeremyWeir