Рассмотрят следующий путь UNC к сетевому ресурсу простых окон (SMB протокол):Синтаксических сетевой путь с учетными данными на типы библиотек базовых классов
\\host\share
Вы можете легко создать экземпляр System.Uri
или System.IO.DirectoryInfo
, передавая этот путь как строку конструктору.
Теперь рассмотрим следующие два пути, оставив все проблемы безопасности в сторону:
\\[email protected]\share
\\username:[email protected]\share
Вы не можете просто передать их конструкторам Ури или DirectoryInfo, потому что они надевают Не знаете, как обращаться с этими путями, которые в основном используются системами Linux. Кроме того, даже если бы они это сделали, они, скорее всего, не сохранили бы учетные данные входа.
В конечном счете, я хотел бы, чтобы преобразовать их в экземпляр System.Uri
, который представляет фактический путь, и экземпляр System.Net.NetworkCredential
, который хранит информацию для входа в систему.
Итак, как мне решить эту проблему? Я даже не знаю, с чего начать. Наследование с System.UriParser
кажется хорошим местом для начала, но согласно MSDN, это не рекомендуется.
Корпорация Майкрософт настоятельно рекомендует использовать парсер, поставляемый с .NET Framework. Создание собственного анализатора увеличивает сложность вашего приложения и не будет работать так же, как и отправленные парсеры.
Спасибо.
EDIT
Простое решение (как размещены ниже), чтобы просто предположить, что все до «@» символ является частью учетных данных входа в систему, и все, что после того, как это реальный путь. Это может быть проблематично, однако, когда имена файлов содержат символы «@».
\\[email protected]\path
: нет проблем
\\[email protected]\[email protected]
: снова не проблема, потому что все перед первым @ является частью входа в систему.
\\host\[email protected]
: теперь мы разорены. Это обязательно вызовет исключения аргументов при передаче в качестве аргумента.
Erm, это не UNC-пути. Пути UNC не позволяют вводить в них информацию о имени пользователя и пароле. Таким образом, нет такой вещи, как UNC-путь с учетными данными. – Joey
Ах, извините. Наверное, ты прав, но я не могу придумать другой способ. –