Example #1
0
        public async IAsyncEnumerable <ChildrenItem> GetChildrenAsync(ChildrenMode mode, string prefixDir)
        {
            for (var request = new ListObjectsRequest
            {
                BucketName = myBucketName,
                Prefix = string.IsNullOrEmpty(prefixDir) ? null : prefixDir.NormalizeLinux() + '/'
            };;)
            {
                var response = await myS3Client.ListObjectsAsync(request);

                foreach (var s3Object in response.S3Objects.Where(IsUserFile))
                {
                    yield return(new ChildrenItem
                    {
                        Name = s3Object.Key.NormalizeSystem(),
                        Size = (mode & ChildrenMode.WithSize) != 0 ? s3Object.Size : -1
                    });
                }

                request.Marker = response.NextMarker;
                if (!response.IsTruncated)
                {
                    break;
                }
            }
        }
Example #2
0
        public async IAsyncEnumerable <ChildrenItem> GetChildrenAsync(ChildrenMode mode, [NotNull] string prefixDir)
        {
            var stack = new Stack <string>();

            stack.Push(string.IsNullOrEmpty(prefixDir) ? myRootDir : Path.Combine(myRootDir, prefixDir));
            while (stack.Count > 0)
            {
                var dir = stack.Pop();
                foreach (var subDir in Directory.EnumerateDirectories(dir))
                {
                    stack.Push(subDir);
                }
                foreach (var file in Directory.EnumerateFiles(dir))
                {
                    yield return(new ChildrenItem
                    {
                        Name = Path.GetRelativePath(myRootDir, file),
                        Size = (mode & ChildrenMode.WithSize) != 0 ? new FileInfo(file).Length : -1
                    });
                }
            }
        }