Все отлично работает, если файловая система на компьютере, при этом система ,я так понимаю, что сама формирует сим линки, то есть выбор конечной папки длиной даже более 256 символов не проблема.
Но вот когда подключаю телефон, то выпадает ошибка.
Подскажите, как решить проблему? гуглил в сторону подключения unicode функций, но не знаю как это сделать.
res2001, нет, просто по щелчку на папку. Короткий путь проходит корректно, без ошибки, с ним можно работать. Проблема именно в этой строке ,все остальное я закомментировал. По сути код такой, если без излишеств ненужных:
using Shell32;
Shell shell = new Shell();
folder = shell.BrowseForFolder((int)0, "Выбор папки", 0, 0);
Все. Уже здесь ошибка.
Причем для компьтера ограничений по длине нет, там сама система формирует симликники
Возможно папка "5677..." слишком длинная, поэкспериментируйте с ее размером.
Так же возможны в имени папки какие-либо спец.символы ( &<>|! ).
Вообще вряд ли вы как-то сможете повлиять на работу системной функции, разве что написать свою. Unicode тут не причем, вы же используете С#, а там юникод по умолчанию.
up7, Есть параметр в реестре:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem\LongPathsEnabled
Если его выставить в 1 (и перезагрузиться), то каким-то приложениям помогает преодолеть это ограничение.
Я не сталкивался с ситуацией, где бы мне это помогло. Возможно вам поможет.
То же самое можно сделать прописав соответствующую опцию в манифесте программы. Подробней тут.
Вообще ограничение в 260 символов было во времена, наверное, Вин95. Тогда в WinSDK в заголовочных файлах была константа MAX_PATH равная 260. Сейчас это давно уже не актуально. Но многие программы до сих пор пользуются этой константой (на сколько знаю она до сих пор на месте, возможно для совместимости).
PS: На сколько я знаю функция BrowseForFolder не имеет своего юникодного двойника, в котором бы были сняты ограничения на длину пути.
up7, Вообще вы пользуетесь ActiveX оберткой над системной функцией SHBrowseForFolder. На самом деле в самой системной функции более широкие возможности. Например там можно задать свою "почти оконную функцию", которая может обрабатывать сообщения винды. Возможно системная функция лишена этого недостатка с длинной пути.
На сколько я знаю из C# можно вызывать функции WinAPI напрямую. Попробуйте такой вариант.
У меня был опыт издевательств над SHBrowseForFolder - делал центрирование окна функции над консольным окном, из которого она вызывалась.