I know it's an old question and Path.GetFileNameWithoutExtensionis a better and maybe cleaner option. But personally I've added this two methods to my project and wanted to share them. This requires C# 8.0 due to it using ranges and indices.
public static string RemoveExtension(this string file) => ReplaceExtension(file, null); public static string ReplaceExtension(this string file, string extension) { var split = file.Split('.'); if (string.IsNullOrEmpty(extension)) return string.Join(".", split[..^1]); split[^1] = extension; return string.Join(".", split); }