| File: Mount\Archive\ZipFileDirectory.cs | Web Access |
| Project: src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Edge\Microsoft.TemplateEngine.Edge.csproj (Microsoft.TemplateEngine.Edge) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Text.RegularExpressions; using Microsoft.TemplateEngine.Abstractions.Mount; namespace Microsoft.TemplateEngine.Edge.Mount.Archive { internal class ZipFileDirectory : DirectoryBase { private readonly ZipFileMountPoint _mountPoint; internal ZipFileDirectory(IMountPoint mountPoint, string fullPath, string name) : base(mountPoint, fullPath, name) { _mountPoint = (ZipFileMountPoint)mountPoint; } public override bool Exists => _mountPoint.Universe.ContainsKey(FullPath); public override IEnumerable<IFileSystemInfo> EnumerateFileSystemInfos(string pattern, SearchOption searchOption) { string rx = Regex.Escape(pattern); rx = rx.Replace("\\*", ".*").Replace("\\?", ".?"); Regex r = new Regex($"^{rx}$"); return _mountPoint.Universe.Values.Where(x => x.FullPath.StartsWith(FullPath, StringComparison.Ordinal) && x.FullPath.Length != FullPath.Length && r.IsMatch(x.Name)).Where(x => searchOption == SearchOption.AllDirectories || x.FullPath.TrimEnd('/').Count(y => y == '/') == FullPath.Count(y => y == '/')); } } }