Files
lightsetup/LightSetupMd5/Md5FileFIlter.cs
2023-05-22 09:29:58 +08:00

71 lines
2.3 KiB
C#

using LightSetupBase;
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
namespace LightSetupMd5
{
internal class Md5FileFIlter
{
public List<FileInfo> GetFiles(Md5MainArgs arg, Md5Config config)
{
// 获取所有的文件信息
List<FileInfo> fileInfo = new List<FileInfo>();
string[] filter = config.Filter.Split("\n");
string[] contain = config.Contain.Split("\n");
addFileInfo(fileInfo, arg, config, filter, contain, new DirectoryInfo(arg.RunPath));
return fileInfo;
}
private void addFileInfo(List<FileInfo> fileInfo, Md5MainArgs arg, Md5Config config,
string[] filter, string[] contain, DirectoryInfo directoryInfo)
{
FileInfo[] fileInfos = directoryInfo.GetFiles();
foreach (FileInfo file in fileInfos)
{
if (fileFilter(arg, filter, contain, file))
{
fileInfo.Add(file);
}
}
DirectoryInfo[] directoryInfos = directoryInfo.GetDirectories();
foreach (DirectoryInfo dic in directoryInfos)
{
addFileInfo(fileInfo, arg, config, filter, contain, dic);
}
}
private bool fileFilter(Md5MainArgs arg, string[] filter, string[] contain, FileInfo file)
{
if (arg.ConfigPath == file.FullName)
{
return false;
}
string absoluteFile = file.FullName.Substring(arg.RunPath.Length);
bool b = false;
foreach (string item in contain)
{
bool isMatch = absoluteFile.Contains(item) || Regex.IsMatch(absoluteFile, item);
if (isMatch)
{
return true;
}
}
foreach (string item in filter)
{
bool isMatch = absoluteFile.Contains(item) || Regex.IsMatch(absoluteFile, item);
if (isMatch)
{
return false;
}
}
return true;
}
}
}