Example #1
0
        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);
        }
Example #2
0
 /// <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));
 }
Example #3
0
        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);
                    }
                }
            }
        }
Example #4
0
 /// <summary>
 /// Проверяет право просмотреть директорию в списке
 /// </summary>
 /// <param name="dir">директория</param>
 /// <returns></returns>
 public static bool CanAccessToDirectoryListItems([NotNull] this DirectoryInfo dir) => dir.CanAccessToDirectory(FileSystemRights.ListDirectory);
Example #5
0
 public static IEnumerable <DirectoryInfo> GetAllSubDirectory([NotNull] this DirectoryInfo ParentDirectory, FileSystemRights rights) =>
 ParentDirectory.CanAccessToDirectory(rights)
         ? ParentDirectory.GetDirectoryInfo(rights)
         : Array.Empty <DirectoryInfo>();
Example #6
0
 /// <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);