2013-04-05 75 views
4

对于UNIX路径,C#中的函数是否等价于PHP的realpathPHP的C#相当于C#的实际路径

我找不到任何和从头开始编写一个似乎很 费时。

我知道GetFullPath的,但它具有以下问题(对我来说):

  • 这是一个的被退回,所以给像"//foo//../bar///c"一个Windows路径,"t:\bar\c"返回。
  • 它消除了从目录名称空间,因此给予像"/foo bar/baz""t:\foobar\baz"返回。
  • 给予Console.WriteLine(Path.GetFullPath("//d/"));甚至不编译,我得到这个ArgumentExcpetion与消息:The UNC path should be of the form \\server\share.
+0

实际路径是符号链接,据我所知,.NET是为了在Windows操作系统上运行。 Windows支持类似于符号链接的东西,但我怀疑他们会在C#中支持这一点。所以主要问题是,你是否真的需要转换符号链接? – 2013-04-05 15:17:44

+1

@Anyone是“意思”?实际上,使用Unity我为各种平台编写C#... – 2014-04-15 13:04:55

+0

@Anyone:ntfs自2000年起支持符号链接支持。我认为。硬连接和目录连接。全功能自2006年以来(只,但非常existant。) – 2014-06-03 09:29:58

回答

0

我认为这取决于你想要什么,你写的是什么类型的应用程序在C#

System.IO有几个路径特定功能

System.IO.Path.GetDirectoryName

你也可以得到你的执行大会使用反射 即System.Reflection.Assembly.GetExecutingAssembly().Location

在MVC中存在的HttpContext 所述的MapPath路径即HttpContext.Current.Server.MapPath

有几种选择,而且大多数是可扩展的。

你的特殊问题是什么?

0

您可以使用Uri类,它只是不合并所有重复的斜线,所以需要进行一些后期处理:

new Regex(@"/\/+/").Replace(new Uri("//foo//../bar///c").AbsolutePath, "/") 

但我会建议你让你有更好的控制自己动手编写代码。

+0

还给'/富/酒吧/// C',而不是'/富/酒吧/ C' – insumity 2013-04-05 15:25:06

+0

我说:“你亲近”只有 – 2013-04-05 15:25:52

+0

,哦,是的(错过了)。我不想接近,我已经接近'GetFullPath' – insumity 2013-04-05 15:27:22