mirror of
https://github.com/AssetRipper/AssetRipper.git
synced 2025-12-11 20:15:29 +01:00
* Sanitize filenames to exclude commas, brackets, and control characters * Add Missing Things
47 lines
1.4 KiB
C#
47 lines
1.4 KiB
C#
using System.Text.RegularExpressions;
|
|
|
|
namespace AssetRipper.IO.Files.Utils
|
|
{
|
|
public static class DirectoryUtils
|
|
{
|
|
public static string FixInvalidPathCharacters(string path)
|
|
{
|
|
return PathRegex.Replace(path, "_").TrimEntries();
|
|
}
|
|
|
|
private static string TrimEntries(this string path)
|
|
{
|
|
if (path.Contains(" /", StringComparison.Ordinal) || path.Contains("/ ", StringComparison.Ordinal))
|
|
{
|
|
string[] entries = path.Split('/', StringSplitOptions.RemoveEmptyEntries | StringSplitOptions.TrimEntries);
|
|
return string.Join('/', entries);
|
|
}
|
|
else
|
|
{
|
|
return path.Trim();
|
|
}
|
|
}
|
|
|
|
private static Regex GeneratePathRegex()
|
|
{
|
|
string invalidChars = new string(Path.GetInvalidFileNameChars().Except(new char[] { '\\', '/' }).ToArray());
|
|
string escapedChars = Regex.Escape(invalidChars);
|
|
// Updated regex to include commas, square brackets, and ASCII control characters
|
|
return new Regex($"[{escapedChars},\\[\\]\\x00-\\x1F]");
|
|
}
|
|
|
|
public static string GetRelativePath(string filePath, string folder)
|
|
{
|
|
Uri pathUri = new Uri(filePath);
|
|
if (!folder.EndsWith(Path.DirectorySeparatorChar.ToString()))
|
|
{
|
|
folder += Path.DirectorySeparatorChar;
|
|
}
|
|
Uri folderUri = new Uri(folder);
|
|
return Uri.UnescapeDataString(folderUri.MakeRelativeUri(pathUri).ToString().Replace('/', Path.DirectorySeparatorChar));
|
|
}
|
|
|
|
private static readonly Regex PathRegex = GeneratePathRegex();
|
|
}
|
|
}
|