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


86

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

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

私が知らない簡単な方法があることを願っています!何か案は?


2
これはデスクトップまたはWebアプリケーションですか?
Chris Kooken 2011年

回答:


104

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

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

..が折りたたまれた状態でフルパスを取得したい場合は、次を使用できます。

Path.GetFullPath((new Uri(absolute_path)).LocalPath);

1
おかげで、私の問題は明らかに、最初にxmlファイルのディレクトリを取得するのを忘れていたため、Combineを試しましたが、ファイルの絶対パスが機能しませんでした。これらすべての答えのどれが最初であったかはわかりません。時間は同じですが、ディレクトリを取得するように指摘されたので、私はあなたの答えを選びました。でもありがとう!
アンダース

10
少し実験すると(new Uri(absolute_path)).LocalPath、同じことをするPath.GetFullPath(absolute_path)ように見えますので、どちらか一方で十分です。
ティムルイス

1
Uriには、パスとファイル名を処理するときに不要な「#」または「&」の特別な処理があることに注意してください。
MatsW

1
@MatsW:docs.microsoft.com/en-us/dotnet/api/system.uri.localpathに記載Gets a local operating-system representation of a file name.されているため、この場合、特別な処理は必要ありません。
FrankM

142
string exactPath = Path.GetFullPath(yourRelativePath);

動作します


14
これは、「相対パスを絶対パスにどのように変換するか」という質問に対する正しい答えです。OPは、「パスのビットをどのように一緒に固執するのですか?」に対する答えを知りたかっただけです。
JonnyRaa 2015

2
最初はこれはうまくいかないと思いましたが、うまくいきました。C:\ test \ A \ .. \ B \ test.txtの相対パスをフィードすると、出力はC:\ test \ B \ test.txt
BraveNewMath 2016年



6

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

5

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

1

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.