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:
@@ -1,7 +1,7 @@
|
|||||||
using Ionic.Zip;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace PepLib.IO
|
namespace PepLib.IO
|
||||||
@@ -22,31 +22,16 @@ namespace PepLib.IO
|
|||||||
|
|
||||||
public void Read(Stream stream)
|
public void Read(Stream stream)
|
||||||
{
|
{
|
||||||
var zipStream = new ZipInputStream(stream);
|
using (var zip = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen: true))
|
||||||
|
|
||||||
ZipEntry theEntry;
|
|
||||||
|
|
||||||
while ((theEntry = zipStream.GetNextEntry()) != null)
|
|
||||||
{
|
{
|
||||||
var size = 2048;
|
foreach (var entry in zip.Entries)
|
||||||
var data = new byte[size];
|
{
|
||||||
|
using var entryStream = entry.Open();
|
||||||
var memstream = new MemoryStream();
|
var memstream = new MemoryStream();
|
||||||
|
entryStream.CopyTo(memstream);
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
size = zipStream.Read(data, 0, data.Length);
|
|
||||||
|
|
||||||
if (size > 0)
|
|
||||||
{
|
|
||||||
memstream.Write(data, 0, size);
|
|
||||||
memstream.Flush();
|
|
||||||
}
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
|
|
||||||
memstream.Seek(0, SeekOrigin.Begin);
|
memstream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
var extension = Path.GetExtension(theEntry.FileName);
|
var extension = Path.GetExtension(entry.FullName);
|
||||||
|
|
||||||
switch (extension)
|
switch (extension)
|
||||||
{
|
{
|
||||||
@@ -57,12 +42,11 @@ namespace PepLib.IO
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (Regex.IsMatch(extension, "loop-\\d\\d\\d"))
|
if (Regex.IsMatch(extension, "loop-\\d\\d\\d"))
|
||||||
Drawing.Loops.Add(ReadLoop(theEntry.FileName, memstream));
|
Drawing.Loops.Add(ReadLoop(entry.FullName, memstream));
|
||||||
|
|
||||||
memstream.Close();
|
memstream.Close();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
zipStream.Close();
|
|
||||||
|
|
||||||
Drawing.ResolveLoops();
|
Drawing.ResolveLoops();
|
||||||
}
|
}
|
||||||
@@ -111,3 +95,4 @@ namespace PepLib.IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
using Ionic.Zip;
|
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
@@ -32,31 +32,16 @@ namespace PepLib.IO
|
|||||||
const string plateExtensionPattern = "plate-\\d\\d\\d";
|
const string plateExtensionPattern = "plate-\\d\\d\\d";
|
||||||
const string loopExtensionPattern = "loop-\\d\\d\\d";
|
const string loopExtensionPattern = "loop-\\d\\d\\d";
|
||||||
|
|
||||||
var zipStream = new ZipInputStream(stream);
|
using (var zip = new ZipArchive(stream, ZipArchiveMode.Read, leaveOpen: true))
|
||||||
|
|
||||||
ZipEntry theEntry;
|
|
||||||
|
|
||||||
while ((theEntry = zipStream.GetNextEntry()) != null)
|
|
||||||
{
|
{
|
||||||
var size = 2048;
|
foreach (var entry in zip.Entries)
|
||||||
var data = new byte[size];
|
{
|
||||||
|
using var entryStream = entry.Open();
|
||||||
var memstream = new MemoryStream();
|
var memstream = new MemoryStream();
|
||||||
|
entryStream.CopyTo(memstream);
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
size = zipStream.Read(data, 0, data.Length);
|
|
||||||
|
|
||||||
if (size > 0)
|
|
||||||
{
|
|
||||||
memstream.Write(data, 0, size);
|
|
||||||
memstream.Flush();
|
|
||||||
}
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
|
|
||||||
memstream.Seek(0, SeekOrigin.Begin);
|
memstream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
var extension = Path.GetExtension(theEntry.FileName);
|
var extension = Path.GetExtension(entry.FullName);
|
||||||
|
|
||||||
switch (extension)
|
switch (extension)
|
||||||
{
|
{
|
||||||
@@ -71,17 +56,16 @@ namespace PepLib.IO
|
|||||||
continue;
|
continue;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Debug.WriteLine("Unknown file: " + theEntry.FileName);
|
Debug.WriteLine("Unknown file: " + entry.FullName);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Regex.IsMatch(extension, loopExtensionPattern))
|
if (Regex.IsMatch(extension, loopExtensionPattern))
|
||||||
loops.Add(theEntry.FileName, memstream);
|
loops.Add(entry.FullName, memstream);
|
||||||
else if (Regex.IsMatch(extension, plateExtensionPattern))
|
else if (Regex.IsMatch(extension, plateExtensionPattern))
|
||||||
plates.Add(theEntry.FileName, memstream);
|
plates.Add(entry.FullName, memstream);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
zipStream.Close();
|
|
||||||
|
|
||||||
foreach (var loop in loops)
|
foreach (var loop in loops)
|
||||||
Nest.Loops.Add(ReadLoop(loop.Key, loop.Value));
|
Nest.Loops.Add(ReadLoop(loop.Key, loop.Value));
|
||||||
@@ -163,3 +147,4 @@ namespace PepLib.IO
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,7 +7,6 @@
|
|||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="DotNetZip" Version="1.16.0" />
|
|
||||||
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.10">
|
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="9.0.10">
|
||||||
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
|
||||||
<PrivateAssets>all</PrivateAssets>
|
<PrivateAssets>all</PrivateAssets>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
using Ionic.Zip;
|
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Text.RegularExpressions;
|
using System.Text.RegularExpressions;
|
||||||
|
|
||||||
namespace PepLib
|
namespace PepLib
|
||||||
@@ -17,41 +17,26 @@ namespace PepLib
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static int ExtractByPattern(string file, string pattern, out string[] names, out Stream[] streams)
|
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 nameList = new List<string>();
|
||||||
var streamList = new List<Stream>();
|
var streamList = new List<Stream>();
|
||||||
|
|
||||||
ZipEntry theEntry;
|
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
|
||||||
|
using (var zip = new ZipArchive(fileStream, ZipArchiveMode.Read))
|
||||||
while ((theEntry = zipStream.GetNextEntry()) != null)
|
|
||||||
{
|
{
|
||||||
if (!Regex.IsMatch(theEntry.FileName, pattern))
|
foreach (var entry in zip.Entries)
|
||||||
|
{
|
||||||
|
if (!Regex.IsMatch(entry.FullName, pattern))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
nameList.Add(theEntry.FileName);
|
nameList.Add(entry.FullName);
|
||||||
|
|
||||||
var memstream = new MemoryStream();
|
var memstream = new MemoryStream();
|
||||||
var size = 2048;
|
using var entryStream = entry.Open();
|
||||||
var data = new byte[size];
|
entryStream.CopyTo(memstream);
|
||||||
|
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
size = zipStream.Read(data, 0, data.Length);
|
|
||||||
|
|
||||||
if (size > 0)
|
|
||||||
{
|
|
||||||
memstream.Write(data, 0, size);
|
|
||||||
memstream.Flush();
|
|
||||||
}
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
|
|
||||||
memstream.Seek(0, SeekOrigin.Begin);
|
memstream.Seek(0, SeekOrigin.Begin);
|
||||||
streamList.Add(memstream);
|
streamList.Add(memstream);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
zipStream.Close();
|
|
||||||
|
|
||||||
names = nameList.ToArray();
|
names = nameList.ToArray();
|
||||||
streams = streamList.ToArray();
|
streams = streamList.ToArray();
|
||||||
@@ -69,43 +54,25 @@ namespace PepLib
|
|||||||
/// <returns></returns>
|
/// <returns></returns>
|
||||||
public static bool ExtractByExtension(string file, string extension, out string name, out Stream stream)
|
public static bool ExtractByExtension(string file, string extension, out string name, out Stream stream)
|
||||||
{
|
{
|
||||||
var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read);
|
using (var fileStream = new FileStream(file, FileMode.Open, FileAccess.Read))
|
||||||
var zipStream = new ZipInputStream(fileStream);
|
using (var zip = new ZipArchive(fileStream, ZipArchiveMode.Read))
|
||||||
var memstream = new MemoryStream();
|
|
||||||
|
|
||||||
ZipEntry theEntry;
|
|
||||||
|
|
||||||
while ((theEntry = zipStream.GetNextEntry()) != null)
|
|
||||||
{
|
{
|
||||||
if (Path.GetExtension(theEntry.FileName) != extension)
|
foreach (var entry in zip.Entries)
|
||||||
|
{
|
||||||
|
if (Path.GetExtension(entry.FullName) != extension)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int size = 2048;
|
var memstream = new MemoryStream();
|
||||||
var data = new byte[size];
|
using var entryStream = entry.Open();
|
||||||
|
entryStream.CopyTo(memstream);
|
||||||
while (true)
|
|
||||||
{
|
|
||||||
size = zipStream.Read(data, 0, data.Length);
|
|
||||||
|
|
||||||
if (size > 0)
|
|
||||||
{
|
|
||||||
memstream.Write(data, 0, size);
|
|
||||||
memstream.Flush();
|
|
||||||
}
|
|
||||||
else break;
|
|
||||||
}
|
|
||||||
|
|
||||||
zipStream.Close();
|
|
||||||
memstream.Seek(0, SeekOrigin.Begin);
|
memstream.Seek(0, SeekOrigin.Begin);
|
||||||
|
|
||||||
stream = memstream;
|
stream = memstream;
|
||||||
name = theEntry.FileName;
|
name = entry.FullName;
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
zipStream.Close();
|
|
||||||
memstream.Close();
|
|
||||||
|
|
||||||
stream = null;
|
stream = null;
|
||||||
name = null;
|
name = null;
|
||||||
@@ -114,3 +81,4 @@ namespace PepLib
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user