C #: Есть ли способ обойти ограничение в 260 символов для полного пути?

Возможный дубликат:
Почему в Windows существует ограничение на длину пути в 260 символов?

Я пытаюсь найти способ обойти это ужасное ограничение пути в 260 символов, и в то же время мне интересно, какого черта существует ограничение пути для начала !? Я знаю, что некоторым людям 260 кажется "много", но на самом деле это не так с тех пор, как я столкнулся с этой проблемой.

В основном:
Почему должно быть ограничение на количество символов?
Как его обойти?


person michael    schedule 12.01.2011    source источник
comment
Слышали о Твиттере? Он имеет ограничение в 140 символов. Это одна из причин всплеска интереса к средствам сокращения URL-адресов, таким как Bitly.   -  person DOK    schedule 12.01.2011
comment
это старый предел ОС Windows, который больше не актуален, за исключением того, что он все еще влияет на многие функции ОС. Но теперь у вас может быть длинное имя файла в .NET framework. visualstudio.uservoice.com/forums/121579-visual-studio-ide/   -  person Pac0    schedule 03.07.2018


Ответы (3)


Используйте префикс \\?\ UNC для выхода из «режима DOS» для путей. Максимальная длина путей UNC - 32 КБ.

Дополнительная информация здесь: http://msdn.microsoft.com/en-us/library/aa365247.aspx

person dthorpe    schedule 12.01.2011
comment
\\? \ не делает его UNC, \\? \ поддерживает UNC. - person Peter Ritchie; 29.08.2013
comment
Каждый компонент (\ ...) имеет предел значения lpMaximumComponentLength (из функции GetVolumeInformation). - person n00dles; 03.11.2015
comment
Есть ли способ обойти это ограничение на компоненты, чтобы каждый компонент был длиннее указанного ограничения, например, 255 символов по умолчанию? - person Swtsvn; 15.07.2016

Из MSDN:

Windows API имеет множество функций, которые также имеют версии Unicode, чтобы разрешить путь увеличенной длины для максимальной общей длины пути 32 767 символов. Этот тип пути состоит из компонентов, разделенных обратной косой чертой, каждый до значения, возвращаемого параметром lpMaximumComponentLength функции GetVolumeInformation (это значение обычно составляет 255 символов). Чтобы указать путь с увеличенной длиной, используйте префикс «\\?\». Например, «\\?\D:\very long path».

person Matten    schedule 12.01.2011

Ну, во-первых, это не имеет ничего общего с C # в частности, и все, что связано с Windows API, в котором находится этот предел. :)

Взгляните на этот вопрос и его ответы, которые приведут вас к MSDN: Именование Файлы, пути и пространства имен

Пути к файлам Unicode (описанные в ответах на вопрос и в статье MSDN) могут быть решением с некоторыми оговорками.

person Dan J    schedule 12.01.2011