FileInfo是DirectoryInfo的后代

div*_*nci 0 .net c# directoryinfo fileinfo

如何检查FileInfo对象是否是DirectoryInfo的后代?

public bool IsFileDescendantOfDirectory(
    FileInfo fileInfo,
    DirectoryInfo directoryInfo)
{

}
Run Code Online (Sandbox Code Playgroud)

Tim*_*ter 5

你可以走上父目录:

public static bool IsFileDescendantOfDirectory(FileInfo fileInfo, DirectoryInfo directoryInfo)
{
    // https://connect.microsoft.com/VisualStudio/feedback/details/777308/inconsistent-behavior-of-fullname-when-provided-path-ends-with-a-backslash
    string path = directoryInfo.FullName.TrimEnd(Path.DirectorySeparatorChar);
    DirectoryInfo dir = fileInfo.Directory;
    while (dir != null)
    {
        if (dir.FullName.TrimEnd(Path.DirectorySeparatorChar).Equals(path, StringComparison.OrdinalIgnoreCase))
            return true;
        dir = dir.Parent;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,你必须比较FullName,DirectoryInfo.Equals不能按预期工作,因为它只使用Object.Equals比较引用.