Exemplo n.º 1
0
        public static IEnumerable <DirectoryEntryEx> EnumerateEntries(this IFileSystem fileSystem, string path, string searchPattern, SearchOptions searchOptions)
        {
            bool ignoreCase = searchOptions.HasFlag(SearchOptions.CaseInsensitive);
            bool recurse    = searchOptions.HasFlag(SearchOptions.RecurseSubdirectories);

            IFileSystem fs = fileSystem;

            fileSystem.OpenDirectory(out IDirectory directory, path.ToU8Span(), OpenDirectoryMode.All).ThrowIfFailure();

            while (true)
            {
                DirectoryEntry dirEntry = default;

                directory.Read(out long entriesRead, SpanHelpers.AsSpan(ref dirEntry)).ThrowIfFailure();
                if (entriesRead == 0)
                {
                    break;
                }

                DirectoryEntryEx entry = GetDirectoryEntryEx(ref dirEntry, path);

                if (PathTools.MatchesPattern(searchPattern, entry.Name, ignoreCase))
                {
                    yield return(entry);
                }

                if (entry.Type != DirectoryEntryType.Directory || !recurse)
                {
                    continue;
                }

                IEnumerable <DirectoryEntryEx> subEntries =
                    fs.EnumerateEntries(PathTools.Combine(path, entry.Name), searchPattern,
                                        searchOptions);

                foreach (DirectoryEntryEx subEntry in subEntries)
                {
                    yield return(subEntry);
                }
            }
        }
Exemplo n.º 2
0
 private string ResolveFullPath(string path)
 {
     return(PathTools.Combine(RootPath, path));
 }
Exemplo n.º 3
0
 internal string ResolveLocalPath(string path)
 {
     return(PathTools.Combine(BasePath, path));
 }
Exemplo n.º 4
0
 private string GetFullPath(string path)
 {
     return(PathTools.Normalize(PathTools.Combine(WorkingDir, path)));
 }