Directory.SetCurrentDirectory генерирует исключение PathTooLongException - PullRequest
2 голосов
/ 29 октября 2010

Есть несколько связанных вопросов о стековом потоке, но либо у меня другая ситуация, либо я слишком туп, чтобы связать их с ситуацией. Я надеюсь, что кто-то может помочь мне с этим. Более того, я даже не являюсь разработчиком .NET, поэтому заранее прошу прощения за неправильное использование терминологии.

Мой сценарий следующий: инструмент, используемый для развертывания нашего приложения .net (одним щелчком мыши?), Помещает его в каталог, полное имя которого превышает 300 символов. Приложение использует сторонний компонент - назовем его dbstore - который обрабатывает указанный файл, который находится в каталоге развертывания приложения.

До сих пор мы использовали Assembly.GetExecutingAssembly().GetName().CodeBase для создания полного имени файла для передачи в dbstore. Но dbstore использует API старого стиля и завершает работу при попытке открыть файл.

Поскольку ожидается, что dbstore скоро не изменится, было рекомендовано приложить chdir к каталогу развертывания и передать ему относительный путь в текущем каталоге. Это также подход, описанный в принятом ответе PathTooLongException в коде C #

Однако я считаю, что Directory.SetCurrentDirectory также выбрасывает PathTooLongException. Это происходит, даже когда я использую UNC-путь, например имя, начинающееся с \\?\0000000000000\...

Я делаю что-то в корне неправильно? Есть ли другая функция для использования?

РЕДАКТИРОВАТЬ: Кажется, нет никакого способа достичь того, что я ищу. Насколько я могу судить, нет способа установить в текущем каталоге длинный путь.

1 Ответ

0 голосов
/ 29 октября 2010

Получаете ли вы похожий результат при использовании 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

...