Мне просто интересно: я ищу способ проверить, действителен ли данный путь. (Примечание: я не хочу проверять, существует ли файл! Я хочу только подтвердить действительность пути - так, если файл может существовать в этом месте) .
Проблема в том, что я ничего не могу найти в API .Net. Из-за множества форматов и расположений, которые поддерживает Windows, я бы предпочел использовать что-то родное для MS.
Поскольку функция должна иметь возможность проверять:
- Относительные пути (./)
- Абсолютные пути (c: \ tmp)
- UNC-пути (\ some-pc \ c $)
- Ограничения NTFS, такие как полный путь 1024 символа. Если я не ошибаюсь, превышение пути сделает файл недоступным для многих внутренних функций Windows. Переименование в проводнике по-прежнему работает
- Пути GUID тома: "\? \ Volume {GUID} \ somefile.foo
У кого-нибудь есть такая функция?
Ответы:
Попробуйте
Uri.IsWellFormedUriString()
:Строка неправильно экранирована.
Строка - это абсолютный Uri, который представляет неявный Uri файла.
Строка представляет собой абсолютный URI без косой черты перед путем.
Строка содержит неэкранированные обратные косые черты, даже если они рассматриваются как прямые.
Строка представляет собой иерархический абсолютный Uri и не содержит «: //».
Парсер для Uri.Scheme указывает, что исходная строка не была правильно сформирована.
источник
@"foo\bar\baz"
, что является вполне допустимым относительным путем ...Или используйте FileInfo, как предложено в C #, проверьте, возможно ли допустимое имя файла (а не то, что оно существует) .
источник
источник
У меня не было проблем с приведенным ниже кодом. (Относительные пути должны начинаться с '/' или '\').
Например, они вернут false:
И это вернет истину:
источник
Вы можете попробовать этот код:
Я не уверен, что он охватывает все случаи ...
источник
Самое близкое, что я пришел, - это попытаться создать его и посмотреть, удастся ли это.
источник
Здесь есть много хороших решений, но, поскольку ни одно из них не проверяет, коренится ли путь в существующем диске, вот еще один:
Это решение не учитывает относительные пути.
источник
Получите недопустимые символы
System.IO.Path.GetInvalidPathChars();
и проверьте, содержит ли ваша строка (путь к каталогу) их или нет.источник
Directory.Exists?
источник
источник
Просто используйте
источник
Вы можете попробовать использовать Path.IsPathRooted () в сочетании с Path.GetInvalidFileNameChars (), чтобы убедиться, что путь находится на полпути в порядке.
источник