From fdf2ea84ece5ca3e442668de21ca65d73d19a954 Mon Sep 17 00:00:00 2001 From: Matt Nadareski Date: Thu, 28 Aug 2025 19:59:06 -0400 Subject: [PATCH] Fix intermittent 7z solid issues --- SabreTools.Serialization/Wrappers/SevenZip.cs | 32 ++++++++++++++++--- 1 file changed, 28 insertions(+), 4 deletions(-) diff --git a/SabreTools.Serialization/Wrappers/SevenZip.cs b/SabreTools.Serialization/Wrappers/SevenZip.cs index 71b0ec09..c08debf6 100644 --- a/SabreTools.Serialization/Wrappers/SevenZip.cs +++ b/SabreTools.Serialization/Wrappers/SevenZip.cs @@ -250,11 +250,35 @@ namespace SabreTools.Serialization.Wrappers if (!Directory.Exists(outputDirectory)) Directory.CreateDirectory(outputDirectory); - sevenZip.WriteToDirectory(outputDirectory, new ExtractionOptions() + int index = 0; + var entries = sevenZip.ExtractAllEntries(); + while (entries.MoveToNextEntry()) { - ExtractFullPath = true, - Overwrite = true, - }); + var entry = entries.Entry; + if (entry.IsDirectory) + continue; + + // Ensure directory separators are consistent + string filename = entry.Key ?? $"extracted_file_{index}"; + if (Path.DirectorySeparatorChar == '\\') + filename = filename.Replace('/', '\\'); + else if (Path.DirectorySeparatorChar == '/') + filename = filename.Replace('\\', '/'); + + // Ensure the full output directory exists + filename = Path.Combine(outputDirectory, filename); + var directoryName = Path.GetDirectoryName(filename); + if (directoryName != null && !Directory.Exists(directoryName)) + Directory.CreateDirectory(directoryName); + + // Write to file + using var fs = File.Open(filename, FileMode.Create, FileAccess.Write, FileShare.None); + entries.WriteEntryTo(fs); + fs.Flush(); + + // Increment the index + index++; + } } catch (System.Exception ex)