Я просто использовал эту очень полезную ссылку: Как мне проверить, является ли данная строка допустимым / допустимым именем файла в Windows ?
И внутри некоторого проверочного кода у меня есть что-то похожее (игнорируйте тот факт, что я не использую класс StringBuilder, и игнорируйте ошибку при формировании сообщения (не нужно сообщать им о «двоеточии» больше, чем один раз, если он появляется в строке более одного раза)):
string InvalidFileNameChars = new string(Path.GetInvalidFileNameChars());
Regex ContainsABadChar = new Regex("[" + Regex.Escape(InvalidFileNameChars) + "]");
MatchCollection BadChars = ContainsABadChar.Matches(txtFileName.Text);
if (BadChars.Count > 0)
{
string Msg = "The following invalid characters were detected:\r\n\r\n";
foreach (Match Bad in BadChars)
{
Msg += Bad.Value + "\r\n";
}
MessageBox.Show(Msg, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
Этот MessageBox будет выглядеть примерно так (в примере с двоеточием):
- begin -
Следующие недопустимые символы обнаружено:
:
- конец -
Я бы хотел сказать что-то вроде:
- начало -
Обнаружены следующие недопустимые символы:
Двоеточие - >:
- end -
Мне нравится английское имя. Не убийца, но мне было любопытно, есть ли там какая-нибудь функция вроде (которой нет для класса Char, но может существовать в некоторых другой класс я не думаю) :
Char.GetEnglishName (':');