Это ответ, который я получил от Силье Йохансена - инженера службы поддержки - Trolltech ASA (хотя в марте 2008 г.)
Тем не менее. сложность включения настроек локали и поиска
унифицированный способ запроса файловых систем в Linux / Unix об их
функциональность близка к невозможной.
Однако, насколько мне известно, все известные мне приложения игнорируют это
проблема.
(читай: они не собираются это реализовывать)
Повышение также не решает проблему, они дают лишь смутное представление о максимальной длине путей, особенно если вы хотите быть кроссплатформенным. Насколько я знаю, многие пытались и не смогли взломать эту проблему (по крайней мере, теоретически, на практике совершенно определенно можно написать программу, которая создает действительные имена файлов в большинстве случаев .
Если вы хотите реализовать это самостоятельно, возможно, стоит рассмотреть несколько не сразу очевидных вещей, таких как:
Осложнения с недопустимыми символами
Разница между ограничениями файловой системы и ОС и программного обеспечения. Проводник Windows, который я считаю частью ОС Windows, не полностью поддерживает NTFS, например. Файлы, содержащие «:», «?» И т. Д., Могут с легкостью находиться в разделе ntfs, но Explorer их просто душит. Кроме этого, вы можете играть безопасно и использовать рекомендации из Boost Filesystem .
Осложнения с длиной пути
Вторая проблема, которая не полностью решена страницей повышения, - это длина полного пути. Вероятно, единственное, что определенно в данный момент, - это то, что никакая комбинация ОС / файловой системы не поддерживает неопределенную длину пути. Однако такие утверждения, как «Максимальный путь Windows ограничен 260 символами», неверны. Unicode API из Windows позволяет создавать пути длиной до 32 767 символов utf-16. Я не проверял, но я представляю, что удушающий проводник Проводника в равной степени посвящен, что сделает эту функцию совершенно бесполезной для программного обеспечения, имеющего других пользователей, кроме вас (с другой стороны, вы можете предпочесть, чтобы ваш программный дроссель не хорил).
Существует старая переменная с именем PATH_MAX, которая звучит многообещающе, но проблема в том, что PATH_MAX просто не .
В заключение приведем несколько идей о возможных способах кодирования решения.
- Используйте определения для создания разделов, специфичных для ОС. ( Qt может помочь вам с этим )
- Используйте рекомендации, приведенные на странице поддержки, а также документацию по ОС и файловой системе, чтобы определить недопустимых символов
- Что касается длины пути, единственная работоспособная идея, которая возникает у меня в голове, - это пробное двоичное дерево, подход с ошибкой, использующий обработку ошибок системного вызова для проверки допустимой длины пути. Это довольно в стороне, но может быть единственной возможностью получить точные результаты на различных системах.
- Удачи в элегантной обработке ошибок.
Надеюсь, это дало некоторые идеи.