Directory.SetCurrentDirectory генерирует исключение PathTooLongException
Есть несколько смежных вопросов по stackru, но либо моя ситуация отличается, либо я слишком туп, чтобы связать их с ситуацией. Я надеюсь, что кто-то может помочь мне с этим. Более того, я даже не являюсь разработчиком.NET, поэтому заранее прошу прощения за неправильное использование терминологии.
Мой сценарий следующий: инструмент, используемый для развертывания нашего приложения.net (One Click?), Помещает его в каталог, полное имя которого превышает 300 символов. Приложение использует сторонний компонент - назовем его dbstore - который обрабатывает указанный файл, который находится в каталоге развертывания приложения.
Пока мы использовали Assembly.GetExecutingAssembly().GetName().CodeBase
создать полное имя файла для передачи в dbstore. Но dbstore использует API старого стиля и завершает работу при попытке открыть файл.
Поскольку ожидается, что dbstore скоро не изменится, было рекомендовано приложить chdir к каталогу развертывания и передать ему относительный путь в текущем каталоге. Это также подход, описанный в принятом ответе PathTooLongException в коде C#
Однако я считаю, что Directory.SetCurrentDirectory
также бросает PathTooLongException
, Это происходит, даже когда я использую UNC-путь, например имя, начинающееся с \\?\0000000000000\...
Я делаю что-то в корне неправильно? Есть ли другая функция для использования?
РЕДАКТИРОВАТЬ: Кажется, нет никакого способа достичь того, что я ищу. Насколько я могу судить, нет способа установить в текущем каталоге длинный путь.
1 ответ
Получаете ли вы похожий результат при использовании Environment.SetCurrentDirectory()?
Если это так, вы можете изменить подпапку каталога после подпапки.
РЕДАКТИРОВАТЬ:
Windows фактически устанавливает ограничение в 255 символов для пути к файлу (WinXP) или 260 символов (в Vista). Обратите внимание, что это ограничение не распространяется на файловую систему, поэтому вы можете хранить файл в таком длинном пути к каталогу, но проводник Windows и многие службы Windows не могут читать по этому пути.
На самом деле, он также включает в себя методы.NET Framework, поскольку вы не можете получить доступ к таким файлам. Возможно, вам придется написать свой собственный API файловой системы, но это слишком много. Вы не можете просто сократить путь к файлу? Предлагает ли Windows сокращенный способ адресации файла (например, 8-октетные имена файлов)?
Источник: http://labnol.blogspot.com/2006/10/limitations-with-long-file-names-on.html