using System; using System.IO; namespace PKHeX.Core; public static partial class Util { /// /// Cleans the local by removing any invalid filename characters. /// /// New string without any invalid characters. public static string CleanFileName(string fileName) { Span result = stackalloc char[fileName.Length]; int ctr = GetCleanFileName(fileName, result); if (ctr == fileName.Length) return fileName; return new string(result[..ctr]); } /// public static string CleanFileName(ReadOnlySpan fileName) { Span result = stackalloc char[fileName.Length]; int ctr = GetCleanFileName(fileName, result); if (ctr == fileName.Length) return fileName.ToString(); return new string(result[..ctr]); } /// /// Removes any invalid filename characters from the input string. /// /// String to clean /// Buffer to write the cleaned string to /// Length of the cleaned string private static int GetCleanFileName(ReadOnlySpan input, Span output) { ReadOnlySpan invalid = Path.GetInvalidFileNameChars(); int ctr = 0; foreach (var c in input) { if (!invalid.Contains(c)) output[ctr++] = c; } return ctr; } }