Это не так просто, как просто проверить, содержит ли имя файла какой-либо из System.IO.Path.GetInvalidFileNameChars (как уже упоминалось в нескольких других ответах).
Например, что если кто-то введет имя, которое не содержит недопустимых символов, но имеет длину 300 символов (то есть больше, чем MAX_PATH) - это не будет работать ни с одним из файловых API-интерфейсов .NET, а только в остальных случаях имеет ограниченную поддержку. окон с использованием синтаксиса \? \ path. Вам нужен контекст, чтобы определить, как долго будет длиться имя файла. Вы можете найти больше информации об этом типе вещей здесь .
В конечном итоге все ваши проверки могут надежно сделать, это доказать, что имя файла является недействительным, или дать вам разумную оценку того, является ли оно действительным. Фактически невозможно доказать, что имя файла является действительным, даже не пытаясь его использовать. (И даже тогда у вас возникают проблемы, например, что, если оно уже существует? Это может быть допустимое имя файла, но допустимо ли в вашем сценарии иметь дублирующееся имя?)