В случае неправильного пути (несуществующий путь, пустая строка, пустая строка) Uri (p) .IsFile выдает исключение.
На мой взгляд, лучше использовать два метода, чтобы понять, что к чему:
private bool PathIsLocalFile(string path)
{
return File.Exists(path);
}
private bool PathIsUrl(string path)
{
if (File.Exists(path))
return false;
try
{
Uri uri = new Uri(path);
return true;
}
catch (Exception)
{
return false;
}
}
//
Microsoft docs:
public static bool Exists(string path);
Возвращает:
Значение true, если вызывающая сторона имеет необходимые разрешения, а путь содержит имя существующего файла; иначе ложно. Этот метод также возвращает false, если path имеет значение null, неверный путь или строку нулевой длины. Если у вызывающей стороны недостаточно прав для чтения указанного файла, исключение не выдается, и метод возвращает значение false независимо от наличия пути.
//
Microsoft docs:
public Uri(string uriString);
Исключения:
T:System.ArgumentNullException:
Значение uriString равно нулю.
T:System.UriFormatException:
uriString пусто. Или Схема, указанная в uriString, сформирована неправильно. См. System.Uri.CheckSchemeName (System.String) .- or- uriString содержит слишком много косых черт. -Или- Пароль, указанный в uriString, недействителен. -Или- Имя хоста, указанное в uriString, недопустимо. -Или- имя файла, указанное в uriString, недопустимо. -ИЛИ- Имя пользователя, указанное в uriString, недопустимо. -или- Имя хоста или полномочия, указанное в uriString, не может быть прервано обратными косыми чертами. -или- Номер порта, указанный в uriString, недопустим или не может быть проанализирован. Длина uriString превышает 65519 символов. -Или- Длина схемы, указанной в uriString, превышает 1023 символа. -Или- Недопустимая последовательность символов в uriString.-or- Путь MS-DOS, указанный в uriString, должен начинаться с c : \ *. * 1016