2013-02-08 2 views
0

Способы .NET, такие как Path.IsPathRooted(), отличные, но бросают, если строка ввода недопустима. Это нормально, но было бы неплохо предварительно проверить, является ли входная строка допустимым путем, прежде чем перейти в блок проверки исключений..NET2 Тест, если строка является допустимым путем

Я не вижу Path.IsValidPath() или аналогичный, есть ли что-то подобное в наличии?

+4

Действительно, как в «путь существует» или «путь соответствует формальным критериям» ? –

+0

Действительный, поскольку он будет генерировать исключение с помощью методов 'Path' :) –

+0

@Ani Я не думаю, что это совсем другой вопрос - наверняка некоторые допустимые URI приведут к исключению в' Path.IsRooted() 'например ? –

ответ

1

Согласно документации,

ArgumentException [брошено когда] путь содержит один или несколько недопустимых символов, определенных в GetInvalidPathChars.

Это означает, что вы можете предварительно проверить ваши строки путь следующим образом:

if (path.IndexOfAny(Path.GetInvalidPathChars()) != -1) { 
    // This means that Path.IsPathRooted will throw an exception 
    .... 
} 

Это единственное условие, при котором IsPathRooted бросает исключение.

Посмотрите на Mono source of Path.cs, строка 496, чтобы узнать, как это реализовано.

1

Вы можете использовать File.Exists или Directory.Exists.

Если вы хотите проверить, если путь содержит недопустимые символы (на NET 2.0) можно использовать Path.GetInvalidPathChars:

char[] invalidChars = System.IO.Path.GetInvalidPathChars(); 
bool valid = path.IndexOfAny(invalidChars) != -1; 
0
public bool ValidPathString(string path) 
{ 
    if (string.IsNullOrEmpty(path)) return false; 
    char[] invalidPathChars = System.IO.Path.GetInvalidPathChars(); 
    foreach (char c in invalidPathChars) 
    { 
     if(path.Contains(c)) return false; 
    } 
    return true; 
} 
Смежные вопросы