【问题标题】:File System Types in .Net.Net 中的文件系统类型
【发布时间】:2011-01-29 11:55:57
【问题描述】:

我不明白抽象和术语:-(

例如,DirectoryInfo.FullName 被定义为目录或文件的完整路径,但它是一个字符串! DirectoryInfo.Name、FileInfo.FullName、Path.GetDirectoyName 等也是如此。

这意味着在 .Net 中,文件系统对象没有“深度”(或“肉”——我的英语不太好)。没有类型系统的保护。例如,我不能定义两个 Path 对象并询问其中一个是否“高于”另一个 - 我必须操纵字符串。我无法区分标识目录的路径和标识文件的路径。我什么都做不了!-( 只是操纵字符串。

这是正确的(或者我只是错过了一些东西)。如果正确,是否有替代方案?

【问题讨论】:

    标签: .net filesystems directory path


    【解决方案1】:

    看看System.IO.Path。要了解您是否有文件,您可以使用Path.GetFileName("C:\\test\\") == String.Empty。或者,如果您确定文件有扩展名,您可以使用Path.HasExtension

    【讨论】:

    • 谢谢,Yuriy,但又是这样:首先,没有 Path 对象。而且,它不是类型安全的——一切都是字符串。甚至他们提供的示例也以: string path1 = @"c:\temp\MyTest.txt";字符串路径2 = @"c:\temp\MyTest";字符串路径3 = @“临时”;但路径不是字符串 - 请参阅下面我对 scottm 的评论。
    【解决方案2】:

    您应该看看Path 类和Uri 类。

    MSDN 链接:

    Path Class

    Uri Class

    例如,对于Path 类,您有一些方法可以只获取目录、文件名,甚至只获取给定路径的不带扩展名的文件名。

    使用Uri 类,您有一个属性可以告诉您它是否是绝对的Uri (IsAbsoluteUri) 和一个创建相对Uri (MakeRelativeUri) 的方法。查看Uri FAQ 了解更多信息。


    从上到下遍历路径的示例:

    var dir = new DirectoryInfo(Environment.CurrentDirectory);
    do
    {
        Console.WriteLine(dir.Name);
    
        dir = dir.Parent;
    } while (dir != null);
    

    【讨论】:

    • 我对 Uri 感觉更好 - 不是所有内容都是字符串,而是文件系统?
    • @Avi,当您想要创建相对路径时,Uri 很有用。除此之外,我坚持使用PathDirectoryInfo 等。
    【解决方案3】:

    我认为 FS 实体的类型安全对象是 FileInfoDirectoryInfo 本身。

    【讨论】:

    • 我对 scottm 的评论,这些是图表上节点的类型,而不是“从一个节点到另一个节点的道路”
    【解决方案4】:

    什么是文件路径而不是字符串?您可以使用Path 类来操作字符串。 DirectoryInfo 类也有一个Parent 来获取它的父目录,FileInfo 有一个Directory 属性来获取它的当前目录。你还需要什么?

    【讨论】:

    • 我认为文件系统是一个有向树的森林,有两种类型的节点(可以有子节点的目录和不能有子节点的文件)和一种带标签的边。路径不是字符串。这是从一个节点到另一个节点的树遍历!路径具有对应的字符串 - 沿其边缘的所有标签的串联。因此,例如,我可以在诸如“GoingUp”或“GoingDown”之类的路径上定义一个操作。
    • 恕我直言,路径本身是节点树中文件/目录位置的字符串表示形式。
    猜你喜欢
    • 2016-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多