Есть несколько связанных вопросов о 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: Кажется, что нет способа добиться того, что я ищу. Насколько я могу судить, нет способа установить текущий каталог на длинный путь.
Там нет 'Environment.SetCurrentDirectory', но свойство' Environment.CurrentDirectory' могут быть назначены. Я получаю тот же результат. Я также получаю такое же исключение после ограничения длины имени файла, даже если я изменяю подпапку после вложенной папки, независимо от того, какую из двух функций я использую. –
Какая у вас ОС? –
Привет, Игорь Я запускаю это на Windows XP SP3. –