public IEnumerable <DirectoryInfo> GetDirectories(bool includeHidden = false)
        {
            if (SearchOption == SearchOptionExtended.SubDirectories)
            {
                var topDirs = DirectoryInfo.GetDirectories("*", System.IO.SearchOption.TopDirectoryOnly);
                var allDirs = DirectoryInfo.GetDirectories("*", System.IO.SearchOption.AllDirectories);

                if (includeHidden)
                {
                    return(allDirs.Where(n => !topDirs.Contains(n)));
                }
                else
                {
                    return(allDirs.Where(n => !topDirs.Contains(n)).Where(n => !n.Attributes.HasFlag(FileAttributes.Hidden)));
                }
            }
            else
            {
                if (includeHidden)
                {
                    return(DirectoryInfo.GetDirectories("*", SearchOption.As <System.IO.SearchOption>()));
                }
                else
                {
                    return(DirectoryInfo.GetDirectories("*", SearchOption.As <System.IO.SearchOption>()).Where(n => !n.Attributes.HasFlag(FileAttributes.Hidden)));
                }
            }
        }