Tenho arquivos xml que contêm caminhos de arquivo href para imagens (por exemplo, ".... \ images \ image.jpg"). Os hrefs contêm caminhos relativos. Agora, preciso extrair os hrefs para as imagens e transformá-los em caminhos absolutos no sistema de arquivos.
Eu sei sobre o método GetFullPath, mas tentei e ele só parece funcionar a partir do conjunto CurrentDirectory, que parece ser C: então não vejo como poderia usar isso. E ainda, eu tenho o caminho absoluto do arquivo que contém os hrefs, e os caminhos relativos do href, portanto, uma vez que é uma tarefa simples para mim contar o número de partes ".... \" com base no caminho absoluto o arquivo que contém, parece que deve haver uma maneira de fazer isso programaticamente também.
Espero que haja algum método simples que eu simplesmente não conheça! Alguma ideia?
fonte
Respostas:
Supondo que você conheça o diretório real em que o arquivo XML reside, use Path.Combine, por exemplo
var absolute_path = Path.Combine(directoryXmlLivesIn, "..\images\image.jpg");
Se quiser voltar o caminho completo com qualquer .. recolhido, você pode usar:
Path.GetFullPath((new Uri(absolute_path)).LocalPath);
fonte
(new Uri(absolute_path)).LocalPath
faz a mesma coisa,Path.GetFullPath(absolute_path)
então um ou outro deve ser suficiente.Gets a local operating-system representation of a file name.
que, neste caso, nenhum tratamento especial deve ser esperado.string exactPath = Path.GetFullPath(yourRelativePath);
trabalho
fonte
Isso funcionou.
var s = Path.Combine(@"C:\some\location", @"..\other\file.txt"); s = Path.GetFullPath(s);
fonte
É a melhor forma de converter o caminho Relativo em caminho absoluto!
string absolutePath = System.IO.Path.GetFullPath(relativePath);
fonte
Você pode usar Path.Combine com o caminho "base" e, em seguida, GetFullPath nos resultados.
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
fonte
Você já tentou o
Server.MapPath
método. Aqui está um exemplostring 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
fonte
Isso funcionou para mim.
//used in an ASP.NET MVC app private const string BatchFilePath = "/MyBatchFileDirectory/Mybatchfiles.bat"; var batchFile = HttpContext.Current.Server.MapPath(BatchFilePath);
fonte
Dê uma olhada em
Path.Combine
http://msdn.microsoft.com/en-us/library/fyy7a5kt.aspxfonte