Exemplo n.º 1
0
        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)}");
                            }
                        }
                    }
                }
            }
        }
Exemplo n.º 2
0
        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);
        }