Russian Qt Forum
Ноябрь 01, 2024, 01:45 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибка проверки пути на абсолютность на Linux.  (Прочитано 2700 раз)
thewizard
Гость
« : Январь 31, 2013, 19:53 »

Здравствуйте.
Столкнулся с ошибкой при проверки абсолютности пути средствами Qt на Linux, если пусть начинается с символа двоеточия. Qt определяет такой путь, как абсолютный, что неверно для Linux.
Вот минимальный код для воспроизведения:
Код
C++ (Qt)
qDebug() << QDir::isAbsolutePath(":");
qDebug() << QDir(":").isAbsolute();
qDebug() << QFileInfo(":").isAbsolute();
 
Данный код напечатает true для всех трёх способов.
Версия Qt 4.7.0, Linux - Kubuntu 10.04.4 LTS, версия ядра 2.6.32-41-generic, x86_64. На более новых версиях Qt и Linux проверить сейчас нету возможности, но чуть позже обязательно это сделаю.

Проблема заключается даже не в этих методах (их можно заменить на свой, благо это просто), а в том, что из-за этого метод QDir::cd() не работает правильно, если нам нужно перейти в папку, имя которой начинается с двоеточия. Дело в том, что в этом методе в начале проверяется не абсолютный ли путь, а потом путь проверяется на существование. Очевидно, такого пути не существует в системе, если рассматривать его как абсолютный (потому что он не абсолютный). И в итоге метод возвращает ошибку. Приходится вместо
Код
C++ (Qt)
QString path = ":t-0012288";
current_directory.cd(path);
 
писать
Код
C++ (Qt)
QString path = ":t-0012288";
current_directory.setPath(current_directory.absolutePath() + QDir::separator() + path);
 
что менее красиво и логично.
Я смотрел исходники Qt, но ошибки не нашёл - для Unix-систем проверка на абсолютность делается самым логичным образом: если первый символ - слеш, то путь абсолютный. Как может возникать баг - не знаю.

Собственно, вопросы.
  • Вы сталкивались с этим?
  • Может я всё таки что-то делаю не так и ошибка не в Qt, а у меня где-то?
  • Что можете посоветовать? Как бы решили ситуацию вы?
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #1 : Январь 31, 2013, 19:56 »

Почитай про ресурсы а документации: The Qt Resource System
С двоеточия начинаются файлы в ресурсах.
Записан
thewizard
Гость
« Ответ #2 : Январь 31, 2013, 20:17 »

Почитай про ресурсы а документации: The Qt Resource System
С двоеточия начинаются файлы в ресурсах.

Давно не использовал ресурсы, поэтому забыл об этом. Но в указанной вами статье написано:
Цитировать
By default, resources are accessible in the application under the same file name as they have in the source tree, with a :/ prefix, or by a URL with a qrc scheme.
То есть для идентификации доступа к ресурсам используется префикс ":/", а следовательно, одно двоеточие в начале пути не должно трактоваться как начало пути к ресурсу.

Так что проблема, видимо, в другом.
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #3 : Январь 31, 2013, 21:05 »

А если двоеточие заекскейпить?

Код
C++ (Qt)
QString path = "\:t-0012288";
 
Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.115 секунд. Запросов: 22.