19

Вопрос по regex, c# – Регулярные выражения в C # для проверки имени файла

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

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

// Return true if string is invalid.
if (Regex.IsMatch(szFileName, "<your regex string>"))
{
    // Tell user to reformat their filename.
}
  • Error: User Rate Limit ExceededproposedFilenameError: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceededmsdn.microsoft.com/en-us/library/…Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от
  • Error: User Rate Limit Exceeded

    от Game_Overture
  • Error: User Rate Limit Exceeded

    от
  • 0

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

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

  • 6

    Это не так просто

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

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

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

  • 0

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

    вместе с классом DirectoryInfo у вас есть набор полезных методов.

  • 48

    Как уже было сказано

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

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