【问题标题】:PHP's realpath equivalent to C#PHP 的 realpath 等价于 C#
【发布时间】:2013-03-28 01:41:07
【问题描述】:

C# 中是否有等效于 PHP 的 realpath 用于 UNIX 路径的函数?

我找不到任何东西,从头开始写一个似乎相当 耗时。

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

  • 这是一个正在返回的 Windows 路径,因此如果给定类似 "//foo//../bar///c" 的内容,则返回 "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.

【问题讨论】:

  • Realpath 用于符号链接,据我所知,.NET 旨在在 Windows 操作系统上运行。 Windows 确实“支持”类似于符号链接的东西,但我怀疑他们会在 C# 中支持这一点。所以主要问题是,你真的需要转换符号链接吗?
  • @Anyone 是“故意的”?实际上使用 Unity 我为各种平台编写 C#...
  • @Anyone:我认为 ntfs 自 2000 年以来就支持符号链接。还有硬链接和目录连接。自 2006 年以来的全功能(仅,但非常存在。)

标签: c# php file


【解决方案1】:

我认为这取决于你想要什么以及你用 C# 编写什么类型的应用程序

System.IO中有几个特定路径的函数

System.IO.Path.GetDirectoryName

您还可以使用反射获取正在执行的程序集路径 即System.Reflection.Assembly.GetExecutingAssembly().Location

在 MVC 中,httpcontext 中有 MapPath 即HttpContext.Current.Server.MapPath

有多种选择,大多数都是可扩展的。

您的具体问题是什么?

【讨论】:

    【解决方案2】:

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

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

    但我建议您自己编写代码,以便更好地控制。

    【讨论】:

    • 返回/foo/bar///c,而不是/foo/bar/c
    • 我说只有“你靠近”
    • 哦,是的(错过了)。我不想亲近,我已经和GetFullPath亲近了
    • 我相信你比GetFullPath更接近。您只需要删除重复的斜杠。我已经为此更新了代码。
    • 我已经检查过了,Uri 类不会用实际路径替换连接/链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 2014-09-20
    相关资源
    最近更新 更多