【问题标题】:FullName, FullPath for Directory目录的全名、完整路径
【发布时间】:2019-02-24 15:32:51
【问题描述】:

为什么 DirectoryInfo 不提供统一的方法来获取文件夹的限定名称。

在这个例子中:

class Program
{
    static void Main(string[] args)
    {
        System.IO.DirectoryInfo DirInfo = new System.IO.DirectoryInfo(@"C:\TEMP\");
        Console.WriteLine(DirInfo.FullName);
        System.IO.DirectoryInfo DirInfo2 = new System.IO.DirectoryInfo(@"C:\TEMP");
        Console.WriteLine(DirInfo2.FullName);
        Console.ReadLine();
    }
}

不管目录是否真的存在,FullName 只是将用户输入反映到对象中,但你不能确定你得到的路径最后带有“\”。

在 MSDN 文档中提到了从 FileSystemInfo 的继承,可以通过属性 FullPath 检索 FQN,但我似乎无法从 DirectoryInfo 的实例访问它。

是否有技巧或其他方法/字段来确保路径始终具有相同的格式?

【问题讨论】:

  • 为什么这对您如此重要?你到底想达到什么目的?
  • 我不确定您的实际问题是什么。如何在目录路径的末尾始终得到一个 \?
  • 如果你想访问这个目录中的文件/目录,你可以使用Directory.GetDirectories(path)Directory.GetFiles(path) 包括它们的路径,并且这些都应该具有相同的格式
  • 嗨,谢谢你的回答,我只是不确定框架是否为此提供了一个属性,因为在生产场景中,我认为如果输出以一种没有人的方式均衡会更容易必须处理额外的代码来实现这一点,但我认为这可以关闭。
  • @Rafalon 这肯定是一种方式,在我的情况下,该目录最初没有文件或目录。

标签: c# .net directory


【解决方案1】:

如果尾随反斜杠不存在,则无法获取它。它是完全可选的,但它也不应该对你的程序产生影响,无论它是否存在。但如果你想确保它:

char[] blackslashes = {Path.DirectorySeparatorChar, Path.AltDirectorySeparatorChar};
string dirPath = @"C:\TEMP";
if (!blackslashes.Contains(dirPath.Last()))
    dirPath += "\\";
System.IO.DirectoryInfo dirInfo = new System.IO.DirectoryInfo(dirPath);

【讨论】:

    【解决方案2】:

    我不确定我是否正确理解了您的问题......但为了统一,只需使用例如。 Sanitize 方法。

    始终删除尾部反斜杠的示例:

    public string SanitizePath(string s) => s.TrimEnd('/', '\\');
    

    始终添加尾部反斜杠的示例:

    public string SanitizePath(string s) => s[s.Length - 1] == '/' || s[s.Length - 1] == '\\' ? s : String.Concat(s, '\\');
    

    但是,如果问题是由于不一致导致的路径无效,您可能会使用String.Concat 来构建完整路径。

    您应该始终使用Path.Combine 来组合路径信息,因为这样可以提供正确的输出。

    【讨论】:

    • 我喜欢你的两种方式。蒂姆斯和你的,一个必须是答案,所以我会选择第一个来的,但感谢您提供意见。
    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 2010-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多