Регулярные выражения в C# для проверки имени файла

Что такое хорошее регулярное выражение, которое может проверить текстовую строку, чтобы удостовериться, что это - допустимое имя файла Windows? (Иначе не имеют \/:*?"<>| символы).

Я хотел бы использовать его как следующее:

// Return true if string is invalid.
if (Regex.IsMatch(szFileName, "<your regex string>"))
{
    // Tell user to reformat their filename.
}
19
задан Peter Mortensen 8 March 2010 в 14:23
поделиться

4 ответа

Как отвечено уже, GetInvalidFileNameChars должен сделать это для Вас, и Вам даже не нужны издержки регулярных выражений:

if (proposedFilename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
  MessageBox.Show("The filename is invalid");
  return;
}
48
ответ дан 30 November 2019 в 02:27
поделиться

Путь. GetInvalidFileNameChars - не Является хорошим путем. Попробуйте это:

if(@"C:\A.txt".IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
  MessageBox.Show("The filename is invalid");
  return;
}
0
ответ дан 30 November 2019 в 02:27
поделиться

Почему не использование Системы. Класс IO.FileInfo, вместе с классом DirectoryInfo у Вас есть ряд полезных методов.

0
ответ дан 30 November 2019 в 02:27
поделиться

Это не столь просто как просто проверяющий, содержит ли имя файла какой-либо из Система. IO.Path. GetInvalidFileNameChars (как упомянуто в нескольких других ответах уже).

, Например, что, если кто-то вводит имя, которое не содержит недопустимых символов, но является 300 символами долго (т.е. больше, чем MAX_PATH) - это не будет работать ни с одними из API файла.NET и только ограничило поддержку в остальной части окон с помощью \? \соединяют синтаксис каналом. Вам нужен контекст относительно того, сколько времени остальная часть пути должна определить, какой длины имя файла может быть. Можно найти [еще 111] информация об этом типе вещи здесь .

В конечном счете все Ваши проверки могут надежно , делают, доказывают, что имя файла не допустимо, или дайте Вам обоснованную оценку относительно того, допустимо ли это. Фактически невозможно доказать, что имя файла допустимо, на самом деле не пытаясь использовать его. (И даже затем у Вас есть проблемы как какой, если это уже существует? Это может быть имя правильного файла, но действительно ли это допустимо в Вашем сценарии, чтобы иметь двойное название?)

6
ответ дан 30 November 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: