From 61866df17e0e0bdd6fe5a7a47198200d59a0934f Mon Sep 17 00:00:00 2001 From: AJ Isaacs Date: Wed, 29 Oct 2025 11:03:56 -0400 Subject: [PATCH] refactor(pep-lib): replace DotNetZip with System.IO.Compression and refactor readers - Remove DotNetZip package from PepLib.Core.csproj - Update DrawingReader, NestReader, and ZipHelper to use System.IO.Compression.ZipArchive - Simplify stream handling and improve resource disposal - Keep behavior consistent for loop/plate detection and extraction --- PepLib.Core/IO/DrawingReader.cs | 55 ++++++++------------- PepLib.Core/IO/NestReader.cs | 73 +++++++++++---------------- PepLib.Core/PepLib.Core.csproj | 1 - PepLib.Core/ZipHelper.cs | 88 +++++++++++---------------------- 4 files changed, 77 insertions(+), 140 deletions(-) diff --git a/PepLib.Core/IO/DrawingReader.cs b/PepLib.Core/IO/DrawingReader.cs index 153eda0..8aeeb0d 100644 --- a/PepLib.Core/IO/DrawingReader.cs +++ b/PepLib.Core/IO/DrawingReader.cs @@ -1,7 +1,7 @@ -using Ionic.Zip; using System; using System.Diagnostics; using System.IO; +using System.IO.Compression; using System.Text.RegularExpressions; namespace PepLib.IO @@ -22,48 +22,32 @@ namespace PepLib.IO public void Read(Stream stream) { - var zipStream = new ZipInputStream(stream); - - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) + using (var zip = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen: true)) { - var size = 2048; - var data = new byte[size]; - var memstream = new MemoryStream(); - - while (true) + foreach (var entry in zip.Entries) { - size = zipStream.Read(data, 0, data.Length); + using var entryStream = entry.Open(); + var memstream = new MemoryStream(); + entryStream.CopyTo(memstream); + memstream.Seek(0, SeekOrigin.Begin); - if (size > 0) + var extension = Path.GetExtension(entry.FullName); + + switch (extension) { - memstream.Write(data, 0, size); - memstream.Flush(); + case ".dir": + LoadInfo(memstream); + memstream.Close(); + continue; } - else break; + + if (Regex.IsMatch(extension, "loop-\\d\\d\\d")) + Drawing.Loops.Add(ReadLoop(entry.FullName, memstream)); + + memstream.Close(); } - - memstream.Seek(0, SeekOrigin.Begin); - - var extension = Path.GetExtension(theEntry.FileName); - - switch (extension) - { - case ".dir": - LoadInfo(memstream); - memstream.Close(); - continue; - } - - if (Regex.IsMatch(extension, "loop-\\d\\d\\d")) - Drawing.Loops.Add(ReadLoop(theEntry.FileName, memstream)); - - memstream.Close(); } - zipStream.Close(); - Drawing.ResolveLoops(); } @@ -111,3 +95,4 @@ namespace PepLib.IO } } } + diff --git a/PepLib.Core/IO/NestReader.cs b/PepLib.Core/IO/NestReader.cs index eb96b19..6f245bc 100644 --- a/PepLib.Core/IO/NestReader.cs +++ b/PepLib.Core/IO/NestReader.cs @@ -1,8 +1,8 @@ -using Ionic.Zip; using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; +using System.IO.Compression; using System.Text; using System.Text.RegularExpressions; @@ -32,57 +32,41 @@ namespace PepLib.IO const string plateExtensionPattern = "plate-\\d\\d\\d"; const string loopExtensionPattern = "loop-\\d\\d\\d"; - var zipStream = new ZipInputStream(stream); - - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) + using (var zip = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen: true)) { - var size = 2048; - var data = new byte[size]; - var memstream = new MemoryStream(); - - while (true) + foreach (var entry in zip.Entries) { - size = zipStream.Read(data, 0, data.Length); + using var entryStream = entry.Open(); + var memstream = new MemoryStream(); + entryStream.CopyTo(memstream); + memstream.Seek(0, SeekOrigin.Begin); - if (size > 0) + var extension = Path.GetExtension(entry.FullName); + + switch (extension) { - memstream.Write(data, 0, size); - memstream.Flush(); + case ".report": + LoadReport(memstream); + memstream.Close(); + continue; + + case ".dwg-info": + LoadDrawingInfo(memstream); + memstream.Close(); + continue; + + default: + Debug.WriteLine("Unknown file: " + entry.FullName); + break; } - else break; + + if (Regex.IsMatch(extension, loopExtensionPattern)) + loops.Add(entry.FullName, memstream); + else if (Regex.IsMatch(extension, plateExtensionPattern)) + plates.Add(entry.FullName, memstream); } - - memstream.Seek(0, SeekOrigin.Begin); - - var extension = Path.GetExtension(theEntry.FileName); - - switch (extension) - { - case ".report": - LoadReport(memstream); - memstream.Close(); - continue; - - case ".dwg-info": - LoadDrawingInfo(memstream); - memstream.Close(); - continue; - - default: - Debug.WriteLine("Unknown file: " + theEntry.FileName); - break; - } - - if (Regex.IsMatch(extension, loopExtensionPattern)) - loops.Add(theEntry.FileName, memstream); - else if (Regex.IsMatch(extension, plateExtensionPattern)) - plates.Add(theEntry.FileName, memstream); } - zipStream.Close(); - foreach (var loop in loops) Nest.Loops.Add(ReadLoop(loop.Key, loop.Value)); @@ -163,3 +147,4 @@ namespace PepLib.IO } } } + diff --git a/PepLib.Core/PepLib.Core.csproj b/PepLib.Core/PepLib.Core.csproj index 75c261e..c2ed5d2 100644 --- a/PepLib.Core/PepLib.Core.csproj +++ b/PepLib.Core/PepLib.Core.csproj @@ -7,7 +7,6 @@ - runtime; build; native; contentfiles; analyzers; buildtransitive all diff --git a/PepLib.Core/ZipHelper.cs b/PepLib.Core/ZipHelper.cs index fba1140..2e616ba 100644 --- a/PepLib.Core/ZipHelper.cs +++ b/PepLib.Core/ZipHelper.cs @@ -1,6 +1,6 @@ -using Ionic.Zip; using System.Collections.Generic; using System.IO; +using System.IO.Compression; using System.Text.RegularExpressions; namespace PepLib @@ -17,42 +17,27 @@ namespace PepLib /// public static int ExtractByPattern(string file, string pattern, out string[] names, out Stream[] streams) { - var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); - var zipStream = new ZipInputStream(fileStream); var nameList = new List(); var streamList = new List(); - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) + using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read)) + using (var zip = new ZipArchive(fileStream, ZipArchiveMode.Read)) { - if (!Regex.IsMatch(theEntry.FileName, pattern)) - continue; - - nameList.Add(theEntry.FileName); - - var memstream = new MemoryStream(); - var size = 2048; - var data = new byte[size]; - - while (true) + foreach (var entry in zip.Entries) { - size = zipStream.Read(data, 0, data.Length); + if (!Regex.IsMatch(entry.FullName, pattern)) + continue; - if (size > 0) - { - memstream.Write(data, 0, size); - memstream.Flush(); - } - else break; + nameList.Add(entry.FullName); + + var memstream = new MemoryStream(); + using var entryStream = entry.Open(); + entryStream.CopyTo(memstream); + memstream.Seek(0, SeekOrigin.Begin); + streamList.Add(memstream); } - - memstream.Seek(0, SeekOrigin.Begin); - streamList.Add(memstream); } - zipStream.Close(); - names = nameList.ToArray(); streams = streamList.ToArray(); @@ -69,44 +54,26 @@ namespace PepLib /// public static bool ExtractByExtension(string file, string extension, out string name, out Stream stream) { - var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read); - var zipStream = new ZipInputStream(fileStream); - var memstream = new MemoryStream(); - - ZipEntry theEntry; - - while ((theEntry = zipStream.GetNextEntry()) != null) + using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read)) + using (var zip = new ZipArchive(fileStream, ZipArchiveMode.Read)) { - if (Path.GetExtension(theEntry.FileName) != extension) - continue; - - int size = 2048; - var data = new byte[size]; - - while (true) + foreach (var entry in zip.Entries) { - size = zipStream.Read(data, 0, data.Length); + if (Path.GetExtension(entry.FullName) != extension) + continue; - if (size > 0) - { - memstream.Write(data, 0, size); - memstream.Flush(); - } - else break; + var memstream = new MemoryStream(); + using var entryStream = entry.Open(); + entryStream.CopyTo(memstream); + memstream.Seek(0, SeekOrigin.Begin); + + stream = memstream; + name = entry.FullName; + + return true; } - - zipStream.Close(); - memstream.Seek(0, SeekOrigin.Begin); - - stream = memstream; - name = theEntry.FileName; - - return true; } - zipStream.Close(); - memstream.Close(); - stream = null; name = null; @@ -114,3 +81,4 @@ namespace PepLib } } } +