private static async Task <IEnumerable <DirectoryInfo> > GetDirectoryInfoAsync( [NotNull] this DirectoryInfo ParentDirectory, FileSystemRights rights, CancellationToken Cancel = default) { Cancel.ThrowIfCancellationRequested(); if (!ParentDirectory.CanAccessToDirectory(FileSystemRights.ListDirectory)) { return(Enumerable.Empty <DirectoryInfo>()); } var dirs = new List <DirectoryInfo>(); DirectoryInfo[] directories; try { directories = await ParentDirectory.Async(dir => dir.GetDirectories(), Cancel).ConfigureAwait(false); } catch (UnauthorizedAccessException) { return(Enumerable.Empty <DirectoryInfo>()); } foreach (var dir in directories) { if (dir.CanAccessToDirectory(rights)) { Cancel.ThrowIfCancellationRequested(); dirs.Add(dir); dirs.AddRange(await dir.GetDirectoryInfoAsync(rights, Cancel).ConfigureAwait(false)); } } return(dirs); }
/// <summary>Получает список всех вложенных директорий на основании прав доступа</summary> /// <param name="ParentDirectory">родительская директория</param> /// <param name="rights">право доступа</param> /// <param name="Cancel">Флаг отмены асинхронной операции</param> /// <returns></returns> public static async Task <IEnumerable <DirectoryInfo> > GetAllSubDirectoryAsync( [NotNull] this DirectoryInfo ParentDirectory, FileSystemRights rights = FileSystemRights.ListDirectory, CancellationToken Cancel = default) { Cancel.ThrowIfCancellationRequested(); return(!ParentDirectory.CanAccessToDirectory(rights) ? Array.Empty <DirectoryInfo>() : await ParentDirectory.GetDirectoryInfoAsync(rights, Cancel).ConfigureAwait(false)); }
private static IEnumerable <DirectoryInfo> GetDirectoryInfo(this DirectoryInfo ParentDirectory, FileSystemRights rights) { if (!ParentDirectory.CanAccessToDirectory(rights)) { yield break; } foreach (var directory in ParentDirectory.GetDirectories()) { if (directory.CanAccessToDirectory(rights)) { yield return(directory); foreach (var sub_dir in directory.GetDirectoryInfo(rights)) { yield return(sub_dir); } } } }
/// <summary> /// Проверяет право просмотреть директорию в списке /// </summary> /// <param name="dir">директория</param> /// <returns></returns> public static bool CanAccessToDirectoryListItems([NotNull] this DirectoryInfo dir) => dir.CanAccessToDirectory(FileSystemRights.ListDirectory);
public static IEnumerable <DirectoryInfo> GetAllSubDirectory([NotNull] this DirectoryInfo ParentDirectory, FileSystemRights rights) => ParentDirectory.CanAccessToDirectory(rights) ? ParentDirectory.GetDirectoryInfo(rights) : Array.Empty <DirectoryInfo>();
/// <summary> /// проверяет право на директорию в соответствии с заданными правами /// </summary> /// <param name="dir">директория</param> /// <param name="AccessRight">искомые права (по умолчанию права на изменение)</param> /// <returns></returns> public static bool CanAccessToDirectory([NotNull] this DirectoryInfo dir, FileSystemRights AccessRight = FileSystemRights.Modify) => dir.CanAccessToDirectory(__CurrentSystemUser, AccessRight);