mirror of
https://github.com/claunia/apprepodbmgr.git
synced 2025-12-16 19:24:42 +00:00
Rename solution, project, files and namespaces.
This commit is contained in:
89
apprepodbmgr.Core/IO.cs
Normal file
89
apprepodbmgr.Core/IO.cs
Normal file
@@ -0,0 +1,89 @@
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user