Helper to diff video files Move matches from directory Bug fix for DirectoryToISO Find replace instead of remove Rename Directory Amazon Immich Person PersonKeyToName PullIconsForBLM New links
50 lines
2.2 KiB
C#
50 lines
2.2 KiB
C#
using DiscUtils.Iso9660;
|
|
using Microsoft.Extensions.Logging;
|
|
|
|
namespace File_Folder_Helper.Day;
|
|
|
|
internal static partial class Helper20240107
|
|
{
|
|
|
|
private static void DirectoryToISO(ILogger<Worker> 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<string> 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<Worker> logger, List<string> args)
|
|
{
|
|
string sourceDirectory = args[0];
|
|
int directories = int.Parse(args[2]);
|
|
string destinationDirectory = args[3];
|
|
logger.LogInformation(sourceDirectory);
|
|
if (sourceDirectory == "C:/ProgramData")
|
|
{
|
|
sourceDirectory = destinationDirectory;
|
|
destinationDirectory = Path.GetDirectoryName(destinationDirectory) ?? throw new NotSupportedException();
|
|
}
|
|
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);
|
|
}
|
|
|
|
} |