First decide what is a "special character" and exactly what you are going to do with it.
In many cases, the simplest solution is to specify a range of "wanted" characters and replace or remove everything else.
The simplest way to do that is to use a Regex.
For example, to replace anything which isn't a letter or digit with '_' is pretty trivial:
string newName = Regex.Replace(fileName, "[^\\w]", "_");