Trim path separators from start of filenames on extract

This commit is contained in:
Matt Nadareski
2026-07-05 23:28:24 -04:00
parent 4083aed12f
commit a602686551
28 changed files with 31 additions and 3 deletions

View File

@@ -63,6 +63,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = file.Name.Length == 0 ? $"file{index}" : file.Name;
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -66,6 +66,7 @@ namespace SabreTools.Wrappers
return false;
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -25,6 +25,8 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = Guid.NewGuid().ToString();
filename = filename.TrimStart(['\\', '/']);
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -72,6 +72,7 @@ namespace SabreTools.Wrappers
}
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -72,6 +72,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = file.Path ?? $"file{index}";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -40,6 +40,7 @@ namespace SabreTools.Wrappers
?? (Filename is not null ? Path.GetFileName(Filename).Replace(".gz", string.Empty) : null)
?? $"extracted_file";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -95,6 +95,7 @@ namespace SabreTools.Wrappers
return false;
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -266,6 +266,7 @@ namespace SabreTools.Wrappers
#endif
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -27,6 +27,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
var filename = entry.Path.TrimEnd('\0');
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -34,6 +34,7 @@ namespace SabreTools.Wrappers
filename += $".{FileExtension}";
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -30,6 +30,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = "tempfile.bin";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -42,6 +42,7 @@ namespace SabreTools.Wrappers
return false;
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -371,10 +371,8 @@ namespace SabreTools.Wrappers
/// <returns>Filestream opened for the file</returns>
private FileStream GetFileStream(string filename, string outputDirectory)
{
// Trim directory separators from the start
filename = filename.TrimStart(['\\', '/']);
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -52,6 +52,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = directoryItem.ItemName.Length == 0 ? $"file{index}" : directoryItem.ItemName;
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -52,6 +52,7 @@ namespace SabreTools.Wrappers
{
// Ensure directory separators are consistent
string filename = segment.FileName ?? $"file{index}";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -74,6 +74,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = entry.Key;
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -83,6 +83,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = entry.Name.Length == 0 ? $"FILE_{i}" : entry.Name;
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')
@@ -601,6 +602,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = entry.Filename?.TrimEnd('\0') ?? $"FILE_{i}";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -240,6 +240,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = entry.Key;
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -120,6 +120,7 @@ namespace SabreTools.Wrappers
return false;
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -49,6 +49,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = entry.Path.TrimEnd('\0');
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -211,6 +211,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = entry.Key;
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -77,6 +77,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
entryDirectory = Path.Combine(outputDirectory, entryDirectory);
entryDirectory = entryDirectory.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
entryDirectory = entryDirectory.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')
@@ -136,6 +137,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = header.FileName?.TrimEnd('\0') ?? $"entry_{i}";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -66,6 +66,7 @@ namespace SabreTools.Wrappers
#pragma warning restore IDE0010
// Ensure directory separators are consistent
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -111,6 +111,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = $"{directoryItem.Name}.{directoryItem.Extension}";
filename = filename.TrimStart(['\\', '/']);
if (!string.IsNullOrEmpty(directoryItem.Path))
filename = Path.Combine(directoryItem.Path, filename);
if (Path.DirectorySeparatorChar == '\\')

View File

@@ -52,6 +52,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = $"{lump.Name}.lmp";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -30,6 +30,7 @@ namespace SabreTools.Wrappers
string filename = Filename is not null
? Path.GetFileNameWithoutExtension(Filename)
: Guid.NewGuid().ToString();
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -61,6 +61,7 @@ namespace SabreTools.Wrappers
// Ensure directory separators are consistent
string filename = directoryItem.Name ?? $"file{index}";
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')

View File

@@ -32,6 +32,7 @@ namespace SabreTools.Wrappers
{
// Ensure directory separators are consistent
string filename = string.IsNullOrEmpty(Filename) ? "filename" : Path.GetFileNameWithoutExtension(Filename);
filename = filename.TrimStart(['\\', '/']);
if (Path.DirectorySeparatorChar == '\\')
filename = filename.Replace('/', '\\');
else if (Path.DirectorySeparatorChar == '/')