Это не так просто, как только проверить, содержит ли имя файла любой от System.IO.Path.GetInvalidFileNameChars (как уже упоминалось в нескольких других ответах).
Например, если кто-то вводит имя, которое не содержит недопустимых символов, но имеет длину 300 символов (то есть больше MAX_PATH) - это не сработает ни с одним из API-интерфейсов .NET, и имеет ограниченную поддержку в остальная часть окон с использованием синтаксиса \? \ path. Вам нужен контекст относительно того, как долго остальная часть пути определяет, как долго может быть имя файла. Вы можете найти more information about this type of thing here.
В конечном счете все ваши чеки могут достоверно do доказывает, что имя файла недействительно или дает разумную оценку относительно его действительности. Практически невозможно доказать, что имя файла действительно без фактического использования. (И даже тогда у вас есть проблемы, например, что, если оно уже существует? Возможно, это допустимое имя файла, но действительно ли в вашем сценарии есть дублирующее имя?)
простая правая скобка помещается в сообщение if, но удивительное спасибо! – Balk 2008-09-19 06:47:55
Значит, «C ::::::::» является допустимым именем? – Andrew 2010-02-18 20:25:50