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
This commit is contained in:
2025-10-29 11:03:56 -04:00
parent 2f56a542a8
commit 61866df17e
4 changed files with 77 additions and 140 deletions

View File

@@ -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
/// <returns></returns>
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<string>();
var streamList = new List<Stream>();
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
/// <returns></returns>
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
}
}
}