FullName,用于目录的FullPath

时间:2018-09-20 10:35:30

标签: c# .net directory

为什么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的实例访问它。

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

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

我不确定我是否确实理解了您的问题……但是要使其统一,只需使用例如。 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来组合路径信息,因为这样可以提供正确的输出。