Платформа.NET « Проверка/валидация имени файла в C#

как проверить имя файла на неразрешенные символы в C#?

1 ответов


Вместо регекспов можно использовать «родные» методы, например:


string fileName = @"Definetly_)(*&&^%$$##@!wrong_<>?":]][[*_filename.txt";
string validFileName = fileName .Trim(Path.GetInvalidFileNameChars());


Также, существует

Path.GetInvalidPathChars()
 соответственно для папок.

вот такая проверка is a MUST а дальше по усмотрению


if (fileName.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
  return false;
}
 

Можно использовать регулярные выражения

http://regexplib.com подсказал такие варианты:

Корректное имя файла (используйте проверку независимую от регистра)
^(?!^(PRN|AUX|CLOCK\$|NUL|CON|COM\d|LPT\d|\..*)(\..+)?$)[^\x00-\x1f\\?*:\";|/]+$

Имя файла с путем (как сетевым так и локальным)
^(([a-zA-Z]:|\\)\\)?(((\.)|(\.\.)|([^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?))\\)*[^\\/:\*\?"\|<>\. ](([^\\/:\*\?"\|<>\. ])|([^\\/:\*\?"\|<>]*[^\\/:\*\?"\|<>\. ]))?$

Упрощенная проверка (работает только с именем файла и не учитывает путь)
^([a-zA-Z]:\\)?[^\x00-\x1F"<>\|:\*\?/]+\.[a-zA-Z]{3,4}$

=================
http://blog.dvteam.ru