diff --git a/SabreTools.FileTypes/Archives/GZipArchive.cs b/SabreTools.FileTypes/Archives/GZipArchive.cs
index b9989b4d..a15efd5d 100644
--- a/SabreTools.FileTypes/Archives/GZipArchive.cs
+++ b/SabreTools.FileTypes/Archives/GZipArchive.cs
@@ -240,7 +240,7 @@ namespace SabreTools.FileTypes.Archives
var gz = new gZip();
ZipReturn ret = gz.ZipFileOpen(Filename);
ret = gz.ZipFileOpenReadStream(0, out Stream? gzstream, out ulong streamSize);
- gzipEntryRom = FileTypeTool.GetInfo(gzstream, _hashTypes);
+ gzipEntryRom = FileTypeTool.GetInfo(gzstream, (long)streamSize, _hashTypes);
gzipEntryRom.Filename = gz.GetLocalFile(0).Filename;
gzipEntryRom.Parent = gamename;
gzipEntryRom.Date = (gz.TimeStamp > 0 ? gz.TimeStamp.ToString() : null);
@@ -406,7 +406,7 @@ namespace SabreTools.FileTypes.Archives
#region Writing
///
- public override bool Write(string file, string outDir, BaseFile? baseFile = null)
+ public override bool Write(string file, string outDir, BaseFile? baseFile)
{
// Check that the input file exists
if (!File.Exists(file))
@@ -423,7 +423,7 @@ namespace SabreTools.FileTypes.Archives
}
///
- public override bool Write(Stream? stream, string outDir, BaseFile? baseFile = null)
+ public override bool Write(Stream? stream, string outDir, BaseFile? baseFile)
{
bool success = false;
@@ -437,8 +437,8 @@ namespace SabreTools.FileTypes.Archives
outDir = Path.GetFullPath(outDir);
- // Now get the Rom info for the file so we have hashes and size
- baseFile = FileTypeTool.GetInfo(stream, _hashTypes, keepReadOpen: true);
+ // If the base file is null, get the hash information
+ baseFile ??= FileTypeTool.GetInfo(stream, -1, _hashTypes, keepReadOpen: true);
// Get the output file name
string outfile = Path.Combine(outDir, Utilities.GetDepotPath(baseFile.SHA1, Depth) ?? string.Empty);
@@ -457,7 +457,7 @@ namespace SabreTools.FileTypes.Archives
BinaryWriter sw = new(outputStream);
// Write standard header and TGZ info
- byte[] data = [.. TorrentGZHeader, .. baseFile.MD5!, .. baseFile.CRC!];
+ byte[] data = [.. TorrentGZHeader, .. baseFile!.MD5!, .. baseFile.CRC!];
sw.Write(data);
sw.Write((ulong)(baseFile.Size ?? 0)); // Long size (Unsigned, Mirrored)
diff --git a/SabreTools.FileTypes/Archives/XZArchive.cs b/SabreTools.FileTypes/Archives/XZArchive.cs
index 0f1a77bf..30677d79 100644
--- a/SabreTools.FileTypes/Archives/XZArchive.cs
+++ b/SabreTools.FileTypes/Archives/XZArchive.cs
@@ -216,7 +216,7 @@ namespace SabreTools.FileTypes.Archives
else
{
var xzStream = new XZStream(File.Open(Filename!, FileMode.Open, FileAccess.Read, FileShare.ReadWrite));
- xzEntryRom = FileTypeTool.GetInfo(xzStream, _hashTypes);
+ xzEntryRom = FileTypeTool.GetInfo(xzStream, size: -1, _hashTypes);
xzEntryRom.Filename = gamename;
xzStream.Dispose();
}
@@ -331,8 +331,8 @@ namespace SabreTools.FileTypes.Archives
outDir = Path.GetFullPath(outDir);
- // Now get the Rom info for the file so we have hashes and size
- baseFile = FileTypeTool.GetInfo(stream, _hashTypes, keepReadOpen: true);
+ // If the base file is null, get the hash information
+ baseFile ??= FileTypeTool.GetInfo(stream, -1, _hashTypes, keepReadOpen: true);
// Get the output file name
string outfile = Path.Combine(outDir, Core.Tools.Utilities.GetDepotPath(baseFile.SHA1, Depth)!);
diff --git a/SabreTools.FileTypes/FileTypeTool.cs b/SabreTools.FileTypes/FileTypeTool.cs
index b00bbd14..15093982 100644
--- a/SabreTools.FileTypes/FileTypeTool.cs
+++ b/SabreTools.FileTypes/FileTypeTool.cs
@@ -60,15 +60,6 @@ namespace SabreTools.FileTypes
}
}
- ///
- /// Retrieve file information for a single stream
- ///
- /// Stream to get information from
- /// Hashes to include in the information
- /// Populated BaseFile object if success, null on error
- public static BaseFile GetInfo(Stream? input, HashType[] hashes)
- => GetInfo(input, size: -1, hashes, keepReadOpen: false);
-
///
/// Retrieve file information for a single stream
///
@@ -105,9 +96,16 @@ namespace SabreTools.FileTypes
try
{
- // If we want to automatically set the size
- if (size == -1)
- size = input.Length;
+ try
+ {
+ // If we want to automatically set the size
+ if (size == -1)
+ size = input.Length;
+ }
+ catch
+ {
+ // Don't set the length if the stream doesn't support it
+ }
// Run the hashing on the input stream
var hashDict = HashTool.GetStreamHashes(input, hashes);