| File: Manifest\ManifestDirectoryInfo.cs | Web Access |
| Project: src\aspnetcore\src\FileProviders\Embedded\src\Microsoft.Extensions.FileProviders.Embedded.csproj (Microsoft.Extensions.FileProviders.Embedded) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System; using System.Collections; using System.Collections.Generic; using System.IO; using System.Linq; using System.Reflection; using Microsoft.AspNetCore.Shared; namespace Microsoft.Extensions.FileProviders.Embedded.Manifest; internal sealed class ManifestDirectoryInfo : IFileInfo, IDirectoryContents { private IFileInfo[]? _entries; public ManifestDirectoryInfo(Assembly assembly, ManifestDirectory directory, DateTimeOffset lastModified) { ArgumentNullThrowHelper.ThrowIfNull(assembly); ArgumentNullThrowHelper.ThrowIfNull(directory); Assembly = assembly; Directory = directory; LastModified = lastModified; } public Assembly Assembly { get; } public bool Exists => true; public long Length => -1; public string? PhysicalPath => null; public string Name => Directory.Name; public DateTimeOffset LastModified { get; } public bool IsDirectory => true; public ManifestDirectory Directory { get; } public Stream CreateReadStream() => throw new InvalidOperationException("Cannot create a stream for a directory."); public IEnumerator<IFileInfo> GetEnumerator() { return EnsureEntries().GetEnumerator(); IEnumerable<IFileInfo> EnsureEntries() => _entries ??= ResolveEntries().ToArray(); IEnumerable<IFileInfo> ResolveEntries() { if (Directory == ManifestEntry.UnknownPath) { return Array.Empty<IFileInfo>(); } var entries = new List<IFileInfo>(); foreach (var entry in Directory.Children) { IFileInfo fileInfo = entry switch { ManifestFile file => new ManifestFileInfo(Assembly, file, LastModified), ManifestDirectory directory => new ManifestDirectoryInfo(Assembly, directory, LastModified), _ => throw new InvalidOperationException("Unknown entry type") }; entries.Add(fileInfo); } return entries; } } IEnumerator IEnumerable.GetEnumerator() => GetEnumerator(); }