2013-04-05 24 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