Поддержка длинных путей для Windows 10

Автор V0lt, 13 сентября 2024, 20:48:02

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

V0lt

Решил улучшить поддержку длинных путей (более 260 символов) для Windows 10 v1607 или новее.

MPC-BE и раньше ограниченно поддерживал длинные пути, когда проводник подсовывал укороченный путь. Но там было много ограничений.
Поэтому за несколько дней сделал следующее:
1. Избавился от ATL CPath, т.к. он не работает с длинными путями.
2. Избавился от некоторых функций Path* из "shlwapi.h" по той же причине.
3. Постепенно ухожу от MAX_PATH для путей к медиафайлам.
Надеюсь, что для обычных путей (до 260 символов) ничего не поломалось. :-)

Начиная с MPC-BE 1.7.3.58 через манифест включена поддержка длинных путей. Чтобы все работало наилучшим образом, надо чтобы в Windows 10 были включены длинные пути.

У меня на Windows 10 22H2 x64 длинные видеофайлы открываются, внешние аудиодорожки подхватываются. В свойствах показывается путь БЕЗ всяких префиксов '\\?\'.

Поддержка длинных путей не работает:
1. Через Drag-and-Drop. Возможно недоработка винды. В MPC-HC также.
2. Через двойной клик в проводнике. Решается установкой новой версии и регистрацией расширений через интерфейс плеера.
3. В диалоге сохранения файлов. Сам диалог работает, но отдает обрезанные пути. В MPC-HC также не работает. Это надо как-то детектить, чтобы не сохранять туда куда не нужно. Похоже недоработка MFC. Исправлено в 1.7.3.61.
4. Для внешних субтитров. Надо менять базовый класс для работы с тестовыми файлами. Исправлено в 1.7.3.66.
Возможны и другие ограничения...

V0lt

#1
Провел тесты с файлами с длинными путями
Открываю через "Быстро открыть файл".
После изменения LongPathsEnabled  перезагружался.

Windows 10 22H2 с LongPathsEnabled = 0.
1.7.3.57 (без longPathAware) - файл открылся с префиксом '\\?\'.
1.7.3.58 (longPathAware = true) - файл открылся с префиксом '\\?\'.

Windows 10 22H2 с LongPathsEnabled = 1.
1.7.3.57 (без longPathAware) - файл открылся с префиксом '\\?\'.
1.7.3.58 (longPathAware = true) - файл открылся без префикса.

Windows 7 SP1.
1.7.3.57 (без longPathAware) - файл открылся с укороченным путем.
1.7.3.58 (longPathAware = true) - файл открылся с укороченным путем.