diff --git a/SabreTools.Helper/Tools/ArchiveTools.cs b/SabreTools.Helper/Tools/ArchiveTools.cs
index b7ef3455..228779b4 100644
--- a/SabreTools.Helper/Tools/ArchiveTools.cs
+++ b/SabreTools.Helper/Tools/ArchiveTools.cs
@@ -1,5 +1,4 @@
-using SharpCompress.Archive;
-using SharpCompress.Common;
+using SharpCompress.Common;
using SharpCompress.Reader;
using System;
using System.IO;
@@ -105,11 +104,20 @@ namespace SabreTools.Helper
ArchiveScanLevel gz, ArchiveScanLevel rar, ArchiveScanLevel zip, Logger logger)
{
bool encounteredErrors = true;
+
+ // First get the archive type
+ ArchiveType? at = GetCurrentArchiveType(input, logger);
+
+ // If we got back null, then it's not an archive, so we we return
+ if (at == null)
+ {
+ return encounteredErrors;
+ }
+
IReader reader = null;
try
{
reader = ReaderFactory.Open(File.OpenRead(input));
- ArchiveType at = reader.ArchiveType;
logger.Log("Found archive of type: " + at);
if ((at == ArchiveType.Zip && zip != ArchiveScanLevel.External) ||
@@ -169,6 +177,7 @@ namespace SabreTools.Helper
/// Retrieve file information for a single torrent GZ file
///
/// Filename to get information from
+ /// Logger object for file and console output
/// Populated RomData object if success, empty one on error
public static RomData GetTorrentGZFileInfo(string input, Logger logger)
{
@@ -244,5 +253,33 @@ namespace SabreTools.Helper
return rom;
}
+
+ ///
+ /// Returns the archive type of an input file
+ ///
+ /// Input file to check
+ /// Logger object for file and console output
+ /// ArchiveType of inputted file (null on error)
+ public static ArchiveType? GetCurrentArchiveType(string input, Logger logger)
+ {
+ ArchiveType? outtype = null;
+
+ IReader reader = null;
+ try
+ {
+ reader = ReaderFactory.Open(File.OpenRead(input));
+ outtype = reader.ArchiveType;
+ }
+ catch (Exception ex)
+ {
+ logger.Error(ex.ToString());
+ }
+ finally
+ {
+ reader?.Dispose();
+ }
+
+ return outtype;
+ }
}
}