Есть ли способ проверить, является ли указанный путь полным путем? Прямо сейчас я делаю это:
if (template.Contains(":\\")) //full path already given
{
}
else //calculate the path from local assembly
{
}
Но должен быть более элегантный способ проверить это?
c#
.net
validation
path
HS2D
источник
источник
IsPathRooted
: избегание доступа к файловой системе или выдача исключений для недопустимого ввода.IsPathRooted
, это, конечно, не было чем-то значительным.GetFullPath
Линия была включена , так что путь оцениваемая можно было наблюдатьВышеупомянутое условие:
false
в большинстве случаев, когда форматpath
недопустим (вместо того, чтобы вызывать исключение)true
только еслиpath
включает объемПоэтому в сценариях, подобных предложенному OP, он может быть более подходящим, чем условия в предыдущих ответах. В отличие от вышеуказанного условия:
path == System.IO.Path.GetFullPath(path)
выдает исключения вместо возвратаfalse
в следующих сценариях:System.IO.Path.IsPathRooted(path)
возвращает,true
еслиpath
начинается с одного разделителя каталогов.Наконец, вот метод, который завершает вышеуказанное условие, а также исключает оставшиеся возможные исключения:
РЕДАКТИРОВАТЬ: EM0 сделал хороший комментарий и альтернативный ответ, касающийся любопытного случая таких путей, как
C:
иC:dir
. Чтобы решить, как вы можете обрабатывать такие пути, вы можете углубиться в MSDN -> Настольные приложения Windows -> Разработка -> Технологии рабочего стола -> Доступ к данным и хранилище -> Локальные файловые системы - -> Управление файлами -> Об управлении файлами -> Создание, удаление и обслуживание файлов -> Именование файлов, путей и пространств имен -> Полные и относительные путиисточник
Пытаться
Работает как для UNC-путей, так и для локальных.
Например
источник
Старый вопрос, но еще один применимый ответ. Если вам нужно убедиться, что том включен в локальный путь, вы можете использовать System.IO.Path.GetFullPath () следующим образом:
источник
GetFullPath
обращается к файловой системе и может выдать ряд возможных исключений. См. Мой ответ ( stackoverflow.com/a/35046453/704808 ) для альтернативы, которая по-прежнему обеспечивает полный путь.Основываясь на плотине ответа «s: это не забросить недействительные пути, но и возвращается
false
к дорожкам , как„C:“,„C: имя - каталог“и„\ путь“.Обратите внимание, что это возвращает разные результаты в Windows и Linux, например, «/ path» является абсолютным в Linux, но не в Windows.
Модульный тест:
источник
Чтобы проверить, полностью ли указан путь (MSDN) :
Это немного проще, чем то, что уже было предложено, и по-прежнему возвращает false для путей, относящихся к диску, например
C:foo
. Его логика основана непосредственно на определении MSDN «полностью квалифицированный», и я не нашел никаких примеров, на которых он ведет себя неправильно.Интересно, однако, что в .NET Core 2.1 появился новый метод,
Path.IsPathFullyQualified
использующий внутренний метод.PathInternal.IsPartiallyQualified
(точное местоположение ссылки по состоянию на 17 апреля 2018 г.).Для потомков и лучшей самодостаточности этого поста, вот реализация последнего для справки:
источник
Это решение, которое я использую
Это работает следующим образом:
источник
C:\foo\..\foo
илиC:\foo\.\.\.
Вызовите следующую функцию:
Документ MSDN: метод Path.IsPathFullyQualified
Полезная цитата из документа MSDN:
источник
Я не совсем уверен, что вы подразумеваете под полным путем (хотя предполагая, что из примера вы имеете в виду не относительный от корня и далее), ну, вы можете использовать класс Path, чтобы помочь вам в работе с путями физических файловых систем, которые должны охватывать вы на все случаи жизни.
источник