web-dev-qa-db-ja.com

C#の絶対パスへの相対パス?

画像へのhrefファイルパスを含むxmlファイルがあります(例: "....\images\image.jpg")。 hrefには相対パスが含まれます。次に、画像にhrefを抽出し、ファイルシステムの絶対パスに変換する必要があります。

GetFullPathメソッドについては知っていますが、試してみましたが、C:のように見えるCurrentDirectoryセットからしか機能しないようです。そのため、どのように使用できるかわかりません。それでも、hrefを含むファイルの絶対パスとhrefの相対パスがあります。ファイルを含む場合、プログラムで同様にこれを行う方法があるはずです。

知らない単純な方法があることを望んでいます!何か案は?

73
Anders

XMLファイルが実際に使用されているディレクトリを知っていると仮定すると、Path.Combineを使用します。

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

..が折りたたまれた状態で完全なパスを取得する場合は、次を使用できます。

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

働く

112
cahit beyaz

これはうまくいきました。

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

Server.MapPath メソッドを試しましたか?ここに例があります

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

Path.Combineを「ベース」パスで使用してから、結果に対してGetFullPathを使用できます。

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

相対パスを絶対パスに変換するのに最適な方法です!

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

これは私のために働いた。

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