diff --git a/SabreTools.Serialization/UnshieldSharp/Extractor.cs b/SabreTools.Serialization/UnshieldSharp/Extractor.cs
index 8a4ae9de..5bd6c921 100644
--- a/SabreTools.Serialization/UnshieldSharp/Extractor.cs
+++ b/SabreTools.Serialization/UnshieldSharp/Extractor.cs
@@ -15,11 +15,6 @@ namespace UnshieldSharpInternal
///
public Header HeaderList { get; private set; }
- ///
- /// Base filename path for related CAB files
- ///
- public string FilenamePattern { get; private set; }
-
///
/// Default buffer size
///
@@ -27,9 +22,8 @@ namespace UnshieldSharpInternal
#region Constructors
- public Extractor(string filenamePattern, Header headerList)
+ public Extractor(Header headerList)
{
- FilenamePattern = filenamePattern;
HeaderList = headerList;
}
diff --git a/SabreTools.Serialization/UnshieldSharp/Reader.cs b/SabreTools.Serialization/UnshieldSharp/Reader.cs
index cb956fe8..8b82dc23 100644
--- a/SabreTools.Serialization/UnshieldSharp/Reader.cs
+++ b/SabreTools.Serialization/UnshieldSharp/Reader.cs
@@ -168,7 +168,7 @@ namespace UnshieldSharpInternal
volume = 1;
_volumeFile?.Close();
- _volumeFile = SabreTools.Serialization.Wrappers.InstallShieldCabinet.OpenFileForReading(_cabinet.FilenamePattern, volume, CABINET_SUFFIX);
+ _volumeFile = _cabinet.HeaderList.OpenFileForReading(volume, CABINET_SUFFIX);
if (_volumeFile == null)
{
Console.Error.WriteLine($"Failed to open input cabinet file {volume}");
diff --git a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs
index 10aaac23..82ab78be 100644
--- a/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs
+++ b/SabreTools.Serialization/Wrappers/InstallShieldCabinet.cs
@@ -92,7 +92,7 @@ namespace SabreTools.Serialization.Wrappers
///
/// Base filename path for related CAB files
///
- private string? _filenamePattern;
+ internal string? FilenamePattern { get; set; }
#endregion
@@ -180,25 +180,6 @@ namespace SabreTools.Serialization.Wrappers
#region Cabinet Set
- ///
- /// Create the generic filename pattern to look for from the input filename
- ///
- /// String representing the filename pattern for a cabinet set, null on error
- public static string? CreateFilenamePattern(string filename)
- {
- string? pattern = null;
- if (string.IsNullOrEmpty(filename))
- return pattern;
-
- string? directory = Path.GetDirectoryName(Path.GetFullPath(filename));
- if (directory != null)
- pattern = Path.Combine(directory, Path.GetFileNameWithoutExtension(filename));
- else
- pattern = Path.GetFileNameWithoutExtension(filename);
-
- return new Regex(@"\d+$").Replace(pattern, string.Empty);
- }
-
///
/// Open a cabinet set for reading, if possible
///
@@ -244,6 +225,10 @@ namespace SabreTools.Serialization.Wrappers
}
}
+ // Set the pattern, if possible
+ if (set != null)
+ set.FilenamePattern = pattern;
+
return set;
}
@@ -253,7 +238,7 @@ namespace SabreTools.Serialization.Wrappers
/// Volume ID, 1-indexed
/// Wrapper representing the volume on success, null otherwise
public InstallShieldCabinet? OpenVolume(ushort volumeId)
- => OpenVolume(_filenamePattern, volumeId);
+ => OpenVolume(FilenamePattern, volumeId);
///
/// Open the numbered cabinet set volume
@@ -295,7 +280,26 @@ namespace SabreTools.Serialization.Wrappers
/// Cabinet files suffix (e.g. `.cab`)
/// A Stream representing the cabinet part, null on error
public Stream? OpenFileForReading(int index, string suffix)
- => OpenFileForReading(_filenamePattern, index, suffix);
+ => OpenFileForReading(FilenamePattern, index, suffix);
+
+ ///
+ /// Create the generic filename pattern to look for from the input filename
+ ///
+ /// String representing the filename pattern for a cabinet set, null on error
+ private static string? CreateFilenamePattern(string filename)
+ {
+ string? pattern = null;
+ if (string.IsNullOrEmpty(filename))
+ return pattern;
+
+ string? directory = Path.GetDirectoryName(Path.GetFullPath(filename));
+ if (directory != null)
+ pattern = Path.Combine(directory, Path.GetFileNameWithoutExtension(filename));
+ else
+ pattern = Path.GetFileNameWithoutExtension(filename);
+
+ return new Regex(@"\d+$").Replace(pattern, string.Empty);
+ }
///
/// Open a cabinet file for reading
@@ -304,7 +308,7 @@ namespace SabreTools.Serialization.Wrappers
/// Cabinet part index to be opened
/// Cabinet files suffix (e.g. `.cab`)
/// A Stream representing the cabinet part, null on error
- public static Stream? OpenFileForReading(string? pattern, int index, string suffix)
+ private static Stream? OpenFileForReading(string? pattern, int index, string suffix)
{
// An invalid pattern means no cabinet files
if (string.IsNullOrEmpty(pattern))
@@ -409,7 +413,7 @@ namespace SabreTools.Serialization.Wrappers
try
{
- var cabfile = new UnshieldSharpInternal.Extractor(pattern, cabinet);
+ var cabfile = new UnshieldSharpInternal.Extractor(cabinet);
for (int i = 0; i < cabinet.FileCount; i++)
{
try