Как отвечено уже, GetInvalidFileNameChars должен сделать это для Вас, и Вам даже не нужны издержки регулярных выражений:
if (proposedFilename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
MessageBox.Show("The filename is invalid");
return;
}
Путь. GetInvalidFileNameChars - не Является хорошим путем. Попробуйте это:
if(@"C:\A.txt".IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
MessageBox.Show("The filename is invalid");
return;
}
Почему не использование Системы. Класс IO.FileInfo, вместе с классом DirectoryInfo у Вас есть ряд полезных методов.
Это не столь просто как просто проверяющий, содержит ли имя файла какой-либо из Система. IO.Path. GetInvalidFileNameChars (как упомянуто в нескольких других ответах уже).
, Например, что, если кто-то вводит имя, которое не содержит недопустимых символов, но является 300 символами долго (т.е. больше, чем MAX_PATH) - это не будет работать ни с одними из API файла.NET и только ограничило поддержку в остальной части окон с помощью \? \соединяют синтаксис каналом. Вам нужен контекст относительно того, сколько времени остальная часть пути должна определить, какой длины имя файла может быть. Можно найти [еще 111] информация об этом типе вещи здесь .
В конечном счете все Ваши проверки могут надежно , делают, доказывают, что имя файла не допустимо, или дайте Вам обоснованную оценку относительно того, допустимо ли это. Фактически невозможно доказать, что имя файла допустимо, на самом деле не пытаясь использовать его. (И даже затем у Вас есть проблемы как какой, если это уже существует? Это может быть имя правильного файла, но действительно ли это допустимо в Вашем сценарии, чтобы иметь двойное название?)