public static async Task RemoveFolder(string folder, IProgress <string> progress) { if (!string.IsNullOrEmpty(folder) && Directory.Exists(folder)) { Dictionary <string, string> remainSize = new Dictionary <string, string>(); Dictionary <string, int> moveRecord = new Dictionary <string, int>(); var moveSubFolder = @"\movefiles\"; var moveFolder = folder + moveSubFolder; if (!Directory.Exists(moveFolder)) { Directory.CreateDirectory(moveFolder); } progress.Report($"初始化移动到的文件夹为 -> {moveFolder}"); var setting = await SettingService.GetSetting(); var exclude = setting.ExcludeFolder + "," + moveSubFolder; var filters = setting.AvNameFilter.Split(',').ToList(); int limitSize = 200; List <FileInfo> fis = new List <FileInfo>(); var status = FileUtility.GetFilesRecursive(folder, exclude, filters, FileUtility.VideoExtensions, fis, limitSize); if (string.IsNullOrEmpty(status)) { progress.Report($"一共获取了 {fis.Count} 个 大于等于 {limitSize}MB 的文件"); } else { progress.Report($"获取文件异常 {status}"); } foreach (var fi in fis) { var n = fi.Name.Replace(fi.Extension, ""); var e = fi.Extension; progress.Report($"开始处理 {fi.FullName}, 文件名 {n} 扩展名 {e}"); if (fi.Name.Contains("-5" + fi.Extension) && fi.Length < 1 * 1024 * 1024 * 1024) { progress.Report("\t删除dummy文件"); continue; } if (moveRecord.ContainsKey(fi.Name)) { moveRecord[fi.Name]++; progress.Report($"\t存在移动记录,添加后缀 {moveRecord[fi.Name]}"); } else { moveRecord.Add(fi.Name, 1); } if (File.Exists(moveFolder + n + e)) { var oldN = n; n += "_" + moveRecord[fi.Name]; progress.Report($"\t存在重名文件,修改文件名 {(n + "_" + moveRecord[fi.Name])}"); if (moveRecord[fi.Name] == 2) { File.Move(moveFolder + oldN + e, moveFolder + oldN + "_1" + e); } } progress.Report($"\t移动文件 >= {fi.FullName} 到 => {moveFolder + n + e}"); File.Move(fi.FullName, moveFolder + n + e); } progress.Report("开始计算剩余各子文件夹大小"); var subFolders = Directory.GetDirectories(folder); foreach (var sub in subFolders) { if (!exclude.Contains(Path.GetFileName(sub), StringComparison.OrdinalIgnoreCase)) { List <FileInfo> tempFi = new(); string tempStatus = FileUtility.GetFilesRecursive(sub, exclude, filters, FileUtility.VideoExtensions + ";!qB", tempFi); double tempSize = 0D; if (string.IsNullOrEmpty(tempStatus)) { foreach (var fi in tempFi) { tempSize += fi.Length; } remainSize.Add(sub, FileUtility.GetAutoSizeString(tempSize, 1)); if (tempSize >= 500 * 1024 * 1024) { progress.Report($"\t =============={sub} 的大小为 {FileUtility.GetAutoSizeString(tempSize, 1)}=============="); } else { progress.Report($"\t {sub} 的大小为 {FileUtility.GetAutoSizeString(tempSize, 1)}"); } } } } } }
public static async Task <(string name, List <AvModel> av)> GetPossibleAvNameAndInfo(string fileName) { (string name, List <AvModel> av)ret = new(); var imgFolder = SettingService.GetSetting().Result.JavLibraryImageFolder; string name = ""; var fi = new FileInfo(fileName); var allPrefix = new SettingsDAL().GetPrefix().Result.OrderByDescending(x => x.Length).ToList(); var fileNameWithoutFormat = fi.Name.Replace(fi.Extension, ""); foreach (var prefix in allPrefix) { if (fileNameWithoutFormat.Contains(prefix, StringComparison.OrdinalIgnoreCase)) { var pattern = prefix + "{1}-?\\d{1,5}"; var possibleId = Regex.Match(fileNameWithoutFormat, pattern, RegexOptions.IgnoreCase).Value; if (possibleId.Contains("-")) { name = possibleId; } else { bool isFirst = true; StringBuilder sb = new StringBuilder(); foreach (var c in possibleId) { if (c >= '0' && c <= '9') { if (isFirst) { sb.Append("-"); isFirst = false; } } sb.Append(c); } name = sb.ToString(); } break; } } ret.name = name.ToUpper(); if (!string.IsNullOrWhiteSpace(name)) { var avs = await new JavLibraryDAL().GetAvModelByWhere($" AND AvId='{name}'"); if (avs != null && avs.Any()) { //foreach (var av in avs) //{ // av.PicUrl = "file://" + (imgFolder + av.AvId + "-" + av.Name + ".jpg").Replace("\\", "/"); //} ret.av = avs; } else { ret.av = new List <AvModel>(); } } else { ret.av = new List <AvModel>(); } return(ret); }