using System.Text; namespace UnrealDemoScanner.Web.Infrastructure; public static class FileNameSanitizer { public static string Sanitize(string? input, string fallback = "demo.dem") { if (string.IsNullOrWhiteSpace(input)) { return fallback; } var invalid = Path.GetInvalidFileNameChars(); var builder = new StringBuilder(input.Length); foreach (var ch in input) { if (invalid.Contains(ch)) { builder.Append('_'); continue; } if (char.IsControl(ch)) { builder.Append('_'); continue; } builder.Append(ch); } var sanitized = builder.ToString().Trim(); if (sanitized.Length == 0) { return fallback; } return sanitized; } }