using DiscUtils.Iso9660; using Microsoft.Extensions.Logging; namespace File_Folder_Helper.Day; internal static partial class Helper20240107 { private static void DirectoryToISO(ILogger logger, string destinationDirectory, bool mapOnly, string directory) { byte[] bytes = []; string relativePath; string directoryName = Path.GetFileName(directory); CDBuilder builder = new() { UseJoliet = true, VolumeIdentifier = directoryName.Length < 25 ? directoryName : directoryName[..25] }; IEnumerable files = Directory.EnumerateFiles(directory, "*", new EnumerationOptions { IgnoreInaccessible = true, RecurseSubdirectories = true }); foreach (string file in files) { relativePath = Path.GetRelativePath(directory, file).Replace(';', '_'); if (!mapOnly) _ = builder.AddFile(relativePath, file); else _ = builder.AddFile(relativePath, bytes); } logger.LogInformation(destinationDirectory); builder.Build(Path.Combine(destinationDirectory, $"{directoryName}.iso")); logger.LogInformation(directoryName); } internal static void DirectoryToISO(ILogger logger, List args) { string sourceDirectory = args[0]; int directories = int.Parse(args[2]); string destinationDirectory = args[3]; logger.LogInformation(sourceDirectory); if (sourceDirectory == "C:/ProgramData") sourceDirectory = destinationDirectory; bool mapOnly = sourceDirectory.Length == 2; if (!Directory.Exists(destinationDirectory)) _ = Directory.CreateDirectory(destinationDirectory); string[] subDirectories = directories == 1 ? [sourceDirectory] : Directory.GetDirectories(sourceDirectory, "*", SearchOption.TopDirectoryOnly); if (subDirectories.Length != directories) throw new Exception($"{directories} != {subDirectories.Length}"); foreach (string directory in subDirectories) DirectoryToISO(logger, destinationDirectory, mapOnly, directory); } }