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



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



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



// Return true if string is invalid.
if (Regex.IsMatch(szFileName, "<your regex string>"))
{
// Tell user to reformat their filename.
}
717   4  

4 ответов:

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

if (proposedFilename.IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
  MessageBox.Show("The filename is invalid");
  return;
}

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

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

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

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

Путь.GetInvalidFileNameChars-это не очень хороший способ. Попробуйте это:

if(@"C:\A.txt".IndexOfAny(System.IO.Path.GetInvalidFileNameChars()) != -1)
{
  MessageBox.Show("The filename is invalid");
  return;
}

Comments

    Ничего не найдено.