将URI路径转换为.NET中的相对文件系统路径

acd*_*cdx 47 .net c# uri path

如何在.NET /foo/bar.txt中将绝对或相对URI路径(例如)转换为(分段)相应的相对文件系统路径(例如foo\bar.txt)?

我的程序不是ASP.NET应用程序.

Ash*_*pta 75

你有没试过Server.MapPath
Uri.LocalPath财产?如下:

string uriString = "file://server/filename.ext";
// Lesson learnt - always check for a valid URI
if(Uri.IsWellFormedUriString(uriString))
{
    Uri uri = new Uri(uriString);
    Console.WriteLine(uri.LocalPath);
}
Run Code Online (Sandbox Code Playgroud)

  • 好吧,我不得不修改此代码以使用此片段而不是Console.WriteLine(uri.LocalPath + Uri.UnescapeDataString(uri.Fragment))这是由于文件名中的#字符 (7认同)

acd*_*cdx 11

我想通过这种方式从相对或绝对URI和基本路径生成完整的绝对文件系统路径.

附:

Uri basePathUri = new Uri(@"C:\abc\");
Run Code Online (Sandbox Code Playgroud)

来自相对URI:

string filePath = new Uri(basePathUri, relativeUri).AbsolutePath;
Run Code Online (Sandbox Code Playgroud)

从绝对URI:

// baseUri is a URI used to derive a relative URI
Uri relativeUri = baseUri.MakeRelativeUri(absoluteUri);
string filePath = new Uri(basePathUri, relativeUri).AbsolutePath;
Run Code Online (Sandbox Code Playgroud)


Nic*_*ver 5

你可以这样做:

var localPath = Server.MapPath("/foo/bar.txt");
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅MSDN

  • 我的程序不是ASP.NET应用程序,如何访问Server对象? (2认同)
  • 我的应用程序是常规.NET控制台应用程序.我想将URI映射到文件系统路径.我认为最简单的方法是将URI路径转换为相对文件系统路径,然后将其传递给`Path.Combine`以及像`C:\ abc \`这样的基本路径,以形成绝对文件系统路径.关于术语,根据定义,相对路径不包含与其相关的信息. (2认同)