Update packages

This commit is contained in:
Matt Nadareski
2024-05-15 12:24:40 -04:00
parent 7432100139
commit aa690ab602
6 changed files with 121 additions and 38 deletions

View File

@@ -85,10 +85,10 @@
<ItemGroup>
<PackageReference Include="SabreTools.Compression" Version="0.5.1" />
<PackageReference Include="SabreTools.Hashing" Version="1.2.0" />
<PackageReference Include="SabreTools.IO" Version="1.4.10" />
<PackageReference Include="SabreTools.IO" Version="1.4.11" />
<PackageReference Include="SabreTools.Matching" Version="1.3.1" />
<PackageReference Include="SabreTools.Models" Version="1.4.5" />
<PackageReference Include="SabreTools.Serialization" Version="1.6.3" />
<PackageReference Include="SabreTools.Models" Version="1.4.6" />
<PackageReference Include="SabreTools.Serialization" Version="1.6.4" />
<PackageReference Include="UnshieldSharp" Version="1.8.2" />
<PackageReference Include="WiseUnpacker" Version="1.4.2" />
</ItemGroup>

View File

@@ -8,7 +8,9 @@ using System.Linq;
#if NET462_OR_GREATER || NETCOREAPP
using System.Text;
#endif
#if NET40_OR_GREATER || NETCOREAPP
using System.Threading.Tasks;
#endif
using BinaryObjectScanner.FileType;
using BinaryObjectScanner.Interfaces;
using BinaryObjectScanner.Utilities;
@@ -327,11 +329,7 @@ namespace BinaryObjectScanner
}
// Get the file type either from magic number or extension
WrapperType fileType = WrapperFactory.GetFileType(magic);
if (fileType == WrapperType.UNKNOWN)
fileType = WrapperFactory.GetFileType(extension);
// If we still got unknown, just return null
WrapperType fileType = WrapperFactory.GetFileType(magic, extension);
if (fileType == WrapperType.UNKNOWN)
return null;

View File

@@ -3,7 +3,6 @@ using System.IO;
#if NET452_OR_GREATER || NETCOREAPP
using System.Text;
#endif
using BinaryObjectScanner.Utilities;
#if NET40_OR_GREATER || NETCOREAPP
using OpenMcdf;
#endif
@@ -24,14 +23,43 @@ using UnshieldSharp.Archive;
namespace Test
{
internal static class Extractor
internal class Extractor
{
#region Options
/// <inheritdoc cref="BinaryObjectScanner.Options.IncludeDebug"/>
public bool IncludeDebug => _options?.IncludeDebug ?? false;
/// <summary>
/// Options object for configuration
/// </summary>
private readonly BinaryObjectScanner.Options _options;
#endregion
/// <summary>
/// Constructor
/// </summary>
/// <param name="includeDebug">Enable including debug information</param>
public Extractor(bool includeDebug)
{
this._options = new BinaryObjectScanner.Options
{
IncludeDebug = includeDebug,
};
#if NET462_OR_GREATER || NETCOREAPP
// Register the codepages
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
#endif
}
/// <summary>
/// Wrapper to extract data for a single path
/// </summary>
/// <param name="path">File or directory path</param>
/// <param name="outputDirectory">Output directory path</param>
public static void ExtractPath(string path, string outputDirectory)
public void ExtractPath(string path, string outputDirectory)
{
Console.WriteLine($"Checking possible path: {path}");
@@ -56,17 +84,30 @@ namespace Test
/// <summary>
/// Print information for a single file, if possible
/// </summary>
private static void ExtractFile(string file, string outputDirectory)
private void ExtractFile(string file, string outputDirectory)
{
Console.WriteLine($"Attempting to extract all files from {file}");
using Stream stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
// Read the first 8 bytes
byte[]? magic = stream.ReadBytes(8);
stream.Seek(0, SeekOrigin.Begin);
// Get the extension for certain checks
string extension = Path.GetExtension(file).ToLower().TrimStart('.');
// Get the first 16 bytes for matching
byte[] magic = new byte[16];
try
{
stream.Read(magic, 0, 16);
stream.Seek(0, SeekOrigin.Begin);
}
catch (Exception ex)
{
if (IncludeDebug) Console.WriteLine(ex);
return;
}
// Get the file type
WrapperType ft = WrapperFactory.GetFileType(magic ?? []);
WrapperType ft = WrapperFactory.GetFileType(magic, extension);
// Executables technically can be "extracted", but let's ignore that
// TODO: Support executables that include other stuff

View File

@@ -1,20 +1,50 @@
using System;
using System.IO;
#if NET452_OR_GREATER || NETCOREAPP
using System.Text;
#endif
using SabreTools.IO.Extensions;
using SabreTools.Serialization.Wrappers;
using SPrinter = SabreTools.Serialization.Printer;
namespace Test
{
internal static class Printer
internal class Printer
{
#region Options
/// <inheritdoc cref="BinaryObjectScanner.Options.IncludeDebug"/>
public bool IncludeDebug => _options?.IncludeDebug ?? false;
/// <summary>
/// Wrapper to print information for a single path
/// Options object for configuration
/// </summary>
/// <param name="path">File or directory path</param>
/// <param name="json">Enable JSON output, if supported</param>
/// <param name="debug">Enable debug output</param>
public static void PrintPathInfo(string path, bool json, bool debug)
private readonly BinaryObjectScanner.Options _options;
#endregion
/// <summary>
/// Constructor
/// </summary>
/// <param name="includeDebug">Enable including debug information</param>
public Printer(bool includeDebug)
{
this._options = new BinaryObjectScanner.Options
{
IncludeDebug = includeDebug,
};
#if NET462_OR_GREATER || NETCOREAPP
// Register the codepages
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
#endif
}/// <summary>
/// Wrapper to print information for a single path
/// </summary>
/// <param name="path">File or directory path</param>
/// <param name="json">Enable JSON output, if supported</param>
/// <param name="debug">Enable debug output</param>
public void PrintPathInfo(string path, bool json, bool debug)
{
Console.WriteLine($"Checking possible path: {path}");
@@ -39,7 +69,7 @@ namespace Test
/// <summary>
/// Print information for a single file, if possible
/// </summary>
private static void PrintFileInfo(string file, bool json, bool debug)
private void PrintFileInfo(string file, bool json, bool debug)
{
Console.WriteLine($"Attempting to print info for {file}");
@@ -47,17 +77,25 @@ namespace Test
{
using Stream stream = File.Open(file, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
// Read the first 8 bytes
byte[]? magic = stream.ReadBytes(8);
stream.Seek(0, SeekOrigin.Begin);
// Get the extension for certain checks
string extension = Path.GetExtension(file).ToLower().TrimStart('.');
// Get the first 16 bytes for matching
byte[] magic = new byte[16];
try
{
stream.Read(magic, 0, 16);
stream.Seek(0, SeekOrigin.Begin);
}
catch (Exception ex)
{
if (IncludeDebug) Console.WriteLine(ex);
return;
}
// Get the file type
WrapperType ft = WrapperFactory.GetFileType(magic ?? []);
if (ft == WrapperType.UNKNOWN)
{
string extension = Path.GetExtension(file).TrimStart('.');
ft = WrapperFactory.GetFileType(extension);
}
WrapperType ft = WrapperFactory.GetFileType(magic, extension);
// Print out the file format
Console.WriteLine($"File format found: {ft}");

View File

@@ -28,6 +28,12 @@ namespace Test
return;
}
// Create extractor for all paths
var extractor = new Extractor(options.Debug);
// Create printer for all paths
var printer = new Printer(options.Debug);
// Create scanner for all paths
var scanner = new Scanner(
options.ScanArchives,
@@ -43,14 +49,14 @@ namespace Test
{
// Extraction
if (options.EnableExtraction)
Extractor.ExtractPath(inputPath, options.OutputPath);
extractor.ExtractPath(inputPath, options.OutputPath);
// Information printing
if (options.EnableInformation)
#if NETFRAMEWORK
Printer.PrintPathInfo(inputPath, false, options.Debug);
printer.PrintPathInfo(inputPath, false, options.Debug);
#else
Printer.PrintPathInfo(inputPath, options.Json, options.Debug);
printer.PrintPathInfo(inputPath, options.Json, options.Debug);
#endif
// Scanning

View File

@@ -28,10 +28,10 @@
<ItemGroup>
<PackageReference Include="SabreTools.Compression" Version="0.5.1" />
<PackageReference Include="SabreTools.IO" Version="1.4.10" />
<PackageReference Include="SabreTools.IO" Version="1.4.11" />
<PackageReference Include="SabreTools.Matching" Version="1.3.1" />
<PackageReference Include="SabreTools.Models" Version="1.4.5" />
<PackageReference Include="SabreTools.Serialization" Version="1.6.3" />
<PackageReference Include="SabreTools.Models" Version="1.4.6" />
<PackageReference Include="SabreTools.Serialization" Version="1.6.4" />
<PackageReference Include="UnshieldSharp" Version="1.8.2" />
</ItemGroup>