using Microsoft.Extensions.Logging; namespace File_Folder_Helper.Day.Q32024; internal static partial class Helper20240805 { private static void RenameFiles(ILogger logger, string sourceDirectory, string[] files, string[] lines, string globalSettingsFile) { string to; string old; string from; string what; string concat; string checkFile; string extension; string[] matches; string[] segments; string environment; List distinct = []; string globalSettingsLines = File.ReadAllText(globalSettingsFile); foreach (string line in lines) { segments = line.Split('|'); if (segments.Length != 7) { logger.LogWarning("Wrong length!"); continue; } to = segments[5].Trim(); old = segments[1].Trim(); from = segments[4].Trim(); what = segments[3].Trim(); environment = segments[2].Trim(); concat = string.Concat(environment, '-', what, '-', from, '-', to); if (distinct.Contains(concat)) { logger.LogWarning("Not distinct <{concat}>!", concat); continue; } distinct.Add(concat); globalSettingsLines = globalSettingsLines.Replace(old, concat); matches = (from l in files where l.Contains(old) select l).ToArray(); if (matches.Length != 1) { logger.LogWarning("matches == {matchesLength} <{concat}>!", matches.Length, concat); continue; } extension = Path.GetExtension(matches[0]); checkFile = Path.Combine(sourceDirectory, $"{concat}{extension}"); File.Move(matches[0], checkFile); } File.WriteAllText(globalSettingsFile, globalSettingsLines); } private static void RenameFiles(string find, string replace, string[] ignoreFileNames, string[] confFiles) { string checkFile; foreach (string confFile in confFiles) { if (ignoreFileNames.Contains(confFile)) continue; checkFile = confFile.Replace(find, replace); if (File.Exists(checkFile)) continue; File.Move(confFile, checkFile); } } internal static void RenameFiles(ILogger logger, List args) { string find = args[6]; string replace = args[7]; string sourceDirectory = Path.GetFullPath(args[0]); string globalSettingsFile = Path.GetFullPath(args[4]); string[] files = Directory.GetFiles(sourceDirectory, args[2], SearchOption.TopDirectoryOnly); string[] confFiles = Directory.GetFiles(sourceDirectory, $"*{find}", SearchOption.TopDirectoryOnly); string[] ignoreFileNames = args[8].Split(',').Select(l => Path.Combine(sourceDirectory, l)).ToArray(); RenameFiles(find, replace, ignoreFileNames, confFiles); string checkFile = Path.Combine(sourceDirectory, args[3]); if (files.Length == 0 || !File.Exists(checkFile)) logger.LogWarning("No found!"); else { string[] lines = File.ReadAllLines(checkFile); if (lines.Length == 0) logger.LogWarning("No lines!"); else RenameFiles(logger, sourceDirectory, files, lines, globalSettingsFile); } } }