2010-10-29 2 views
2

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

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

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

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

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

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

EDIT: Кажется, что нет способа добиться того, что я ищу. Насколько я могу судить, нет способа установить текущий каталог на длинный путь.

ответ

0

Получаете ли вы аналогичный результат при использовании Environment.SetCurrentDirectory()?

Если это так, вы можете захотеть изменить подкаталог каталога в подпапке.

EDIT:
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

+0

Там нет 'Environment.SetCurrentDirectory', но свойство' Environment.CurrentDirectory' могут быть назначены. Я получаю тот же результат. Я также получаю такое же исключение после ограничения длины имени файла, даже если я изменяю подпапку после вложенной папки, независимо от того, какую из двух функций я использую. –

+0

Какая у вас ОС? –

+0

Привет, Игорь Я запускаю это на Windows XP SP3. –

Смежные вопросы