45 lines
1.3 KiB
C#
45 lines
1.3 KiB
C#
namespace View_by_Distance.Shared.Models.Stateless.Methods;
|
|
|
|
internal abstract class FileHolder
|
|
{
|
|
|
|
internal static List<Models.FileHolder> GetFileHolders((string, string[])[] collection)
|
|
{
|
|
List<Models.FileHolder> results = new();
|
|
foreach ((string _, string[] files) in collection)
|
|
results.AddRange(files.Select(l => new Models.FileHolder(l)));
|
|
return results;
|
|
}
|
|
|
|
internal static IEnumerable<Models.FileHolder> GetFileHolders(IEnumerable<(string, string)> collection)
|
|
{
|
|
foreach ((string _, string file) in collection)
|
|
yield return new(file);
|
|
}
|
|
|
|
internal static IEnumerable<(string, string[])> GetFiles(string root, string searchPattern)
|
|
{
|
|
Stack<string> pending = new();
|
|
pending.Push(root);
|
|
while (pending.Count != 0)
|
|
{
|
|
string[]? next = null;
|
|
string path = pending.Pop();
|
|
try
|
|
{
|
|
next = Directory.GetFiles(path, searchPattern);
|
|
}
|
|
catch { }
|
|
if (next is not null && next.Any())
|
|
yield return new(path, next);
|
|
try
|
|
{
|
|
next = Directory.GetDirectories(path);
|
|
foreach (string subDirectory in next)
|
|
pending.Push(subDirectory);
|
|
}
|
|
catch { }
|
|
}
|
|
}
|
|
|
|
} |