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?
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);
string exactPath = Path.GetFullPath(yourRelativePath);
travaux
Cela a fonctionné.
var s = Path.Combine(@"C:\some\location", @"..\other\file.txt");
s = Path.GetFullPath(s);
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
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
C'est le meilleur moyen de convertir le chemin relatif en chemin absolu!
string absolutePath = System.IO.Path.GetFullPath(relativePath);
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);
Jetez un coup d’œil à Path.Combine
http://msdn.Microsoft.com/en-us/library/fyy7a5kt.aspx