mirror of
https://github.com/claunia/apprepodbmgr.git
synced 2025-12-16 19:24:42 +00:00
89 lines
3.8 KiB
C#
89 lines
3.8 KiB
C#
using System.Collections.Generic;
|
|
using System.IO;
|
|
using System.Linq;
|
|
|
|
namespace apprepodbmgr.Core
|
|
{
|
|
public static class IO
|
|
{
|
|
public static List<string> EnumerateFiles(string path, string searchPattern,
|
|
SearchOption searchOption,
|
|
bool followLinks = true, bool symlinks = true)
|
|
{
|
|
if(followLinks) return new List<string>(Directory.EnumerateFiles(path, searchPattern, searchOption));
|
|
|
|
List<string> files = new List<string>();
|
|
List<string> directories = new List<string>();
|
|
|
|
foreach(string file in Directory.EnumerateFiles(path, searchPattern))
|
|
{
|
|
FileInfo fi = new FileInfo(file);
|
|
if(fi.Attributes.HasFlag(FileAttributes.ReparsePoint) && symlinks) files.Add(file);
|
|
else if(!fi.Attributes.HasFlag(FileAttributes.ReparsePoint))
|
|
files.Add(file);
|
|
}
|
|
|
|
if(searchOption != SearchOption.AllDirectories) return files;
|
|
|
|
foreach(string directory in Directory.EnumerateDirectories(path, searchPattern))
|
|
{
|
|
DirectoryInfo di = new DirectoryInfo(directory);
|
|
if(!di.Attributes.HasFlag(FileAttributes.ReparsePoint))
|
|
files.AddRange(EnumerateFiles(directory, searchPattern, searchOption, followLinks, symlinks));
|
|
}
|
|
|
|
return files;
|
|
}
|
|
|
|
public static List<string> EnumerateDirectories(string path, string searchPattern,
|
|
SearchOption searchOption,
|
|
bool followLinks = true, bool symlinks = true)
|
|
{
|
|
if(followLinks) return new List<string>(Directory.EnumerateDirectories(path, searchPattern, searchOption));
|
|
|
|
List<string> directories = new List<string>();
|
|
|
|
if(searchOption != SearchOption.AllDirectories) return directories;
|
|
|
|
directories.AddRange(from directory in Directory.EnumerateDirectories(path, searchPattern)
|
|
let di = new DirectoryInfo(directory)
|
|
where !di.Attributes.HasFlag(FileAttributes.ReparsePoint)
|
|
select directory);
|
|
|
|
List<string> newDirectories = new List<string>();
|
|
|
|
foreach(string directory in directories)
|
|
newDirectories.AddRange(EnumerateDirectories(directory, searchPattern, searchOption, followLinks,
|
|
symlinks));
|
|
|
|
directories.AddRange(newDirectories);
|
|
|
|
return directories;
|
|
}
|
|
|
|
public static List<string> EnumerateSymlinks(string path, string searchPattern, SearchOption searchOption)
|
|
{
|
|
List<string> directories = new List<string>();
|
|
|
|
List<string> links = (from file in Directory.EnumerateFiles(path, searchPattern)
|
|
let fi = new FileInfo(file)
|
|
where fi.Attributes.HasFlag(FileAttributes.ReparsePoint)
|
|
select file).ToList();
|
|
|
|
if(searchOption != SearchOption.AllDirectories) return links;
|
|
|
|
foreach(string directory in Directory.EnumerateDirectories(path, searchPattern))
|
|
{
|
|
DirectoryInfo di = new DirectoryInfo(directory);
|
|
if(!di.Attributes.HasFlag(FileAttributes.ReparsePoint)) directories.Add(directory);
|
|
else //if (!links.Contains(directory))
|
|
links.Add(directory);
|
|
}
|
|
|
|
foreach(string directory in directories)
|
|
links.AddRange(EnumerateSymlinks(directory, searchPattern, searchOption));
|
|
|
|
return links;
|
|
}
|
|
}
|
|
} |