using System.Text.RegularExpressions;
public static void Main()
foreach(var junk in new String[] {"A2","A 2.txt","A 2!@#$%^&*_()-+={}[]~`,.<>:\";'\\/?"})
string name = "DRONE_Cert" + junk;
string ext = ".txt?q=100";
Console.WriteLine("ORIGINAL: " + name + ext);
Console.WriteLine("TEST-1 : " + MakeValidFileName(name,ext));
Console.WriteLine("TEST-2 : " + MakeValidFileName2(name,ext));
Console.WriteLine("-----------------------------------------");
public static string MakeValidFileName2(string name, string ext)
var invalid = @"[\W*" + new string(Path.GetInvalidFileNameChars()) + "*]";
name = (name??"noname").Split('.')[0];
name = Regex.Replace(name, invalid,"");
ext = (ext??"").Split('?','#')[0];
ext = Regex.Replace(ext, invalid, "");
if (!String.IsNullOrWhiteSpace(ext)) ext = "." + ext;
public static string MakeValidFileName(string fileName, string extension)
fileName = fileName.Replace(extension, string.Empty);
char[] invalidChars = Path.GetInvalidFileNameChars();
foreach (char c in invalidChars)
fileName = fileName.Replace(c.ToString(), string.Empty);
fileName = fileName.Replace(".", string.Empty);
fileName = fileName.Replace(",", string.Empty);
fileName = fileName.Replace("/", string.Empty);
fileName = fileName.Replace("\\", string.Empty);
fileName = fileName.Replace("<", string.Empty);
fileName = fileName.Replace(">", string.Empty);
fileName = fileName.Replace(":", string.Empty);
fileName = fileName.Replace("*", string.Empty);
fileName = fileName.Replace("|", string.Empty);
fileName = fileName.Replace("\"", string.Empty);
extension = extension.Replace(".", string.Empty);
return fileName + "." + extension;