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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Visual Studio пути и регистр символов  (Прочитано 5905 раз)
SLiDER
Гость
« : Октябрь 24, 2006, 10:56 »

В Qt есть несколько способов получить относительный путь для какой-нибудь директории приложения. Для примера возьмем два (получим текущую директорию приложения, при условии что она не изменялась программистом вручную):
Первый
Код:
QDir d(".");
QString path = d.absolutePath();

Второй
Код:
QString path = qApp->applicationDirPath();

В случае если приложение будет запущено не из под VS, оба этих способа вернут идентичные результаты вплоть до регистра символов. Но при запуске приложения из под VS результаты будут кардинально отличаться, если не предпринять некоторых действий по настроке проекта. А именно VS в качестве рабочей дериктории программы подсунет приложению директорию проекта (первый способ), а полученый вторым способом путь, хоть и будет указывать именно на директорию где находится сам exe-файл, но будет иметь не тот регистр у буквы диска и возможно еще каких либо символов. Если первое не страшно и легко настраивается в свойствах проекта, то как бороться со втророй проблемой я так и не могу понять. Приходиться лепить костыли (для отладки), т.к. некоторые фунции самой Qt по работе с путями чувствительны к регистру. И это далеко не полный список проблемных мест в работе с путями под виндой.
Кто как решает данную проблему?

З.Ы. Qt 4.x.x
Записан
bigirbis
Гость
« Ответ #1 : Октябрь 24, 2006, 11:20 »

Лично я стараюсь не работать с путями в чистом виде. Лучше работать с QDir/QFile/QFileInfo. Если надо, то потом из них пути уже доставать, сравнивать и пр.
Записан
Dendy
Гость
« Ответ #2 : Октябрь 24, 2006, 12:48 »

Ети два способа как раз и не должньІ возвращать один и тот же результат. Кто сказал, что рабочая директория должна бьІть той же, где лежит исполняемьІй файл? Например, в линках виндьІ (.lnk) можно задать её другую, и именно её вернёт QDir::current() и именно там (по логике вещей) программа должна брать необзодимьІе ей файльІ. Кроме того, рабочую директорию можно изменить из самой программьІ QDir::setCurrent().

QCoreApplication::applicationDirPath() всегда указьІвает на реальную директорию исполняемого файла. Может использоваться, например, для чтения манифеста.

А вот проблема с регистрами скорее всего действительно баг. Лучше сообщить Троллям.
Записан
Alex03
Гость
« Ответ #3 : Октябрь 24, 2006, 13:26 »

А какой д.б. регистр у буквы диска?
ИМХО винде по барабану.
Записан
Dendy
Гость
« Ответ #4 : Октябрь 24, 2006, 13:29 »

Винде может бьІть по барабану, но если тьІ сам соберёшься сравнивать пути в программе, то регистронезависимоть и слешенезависимость виндьІ вьІлезут окаким боком. Ибо один и тот же путь можно трактовать многими записями.
Записан
SLiDER
Гость
« Ответ #5 : Октябрь 24, 2006, 18:09 »

Цитата: "Dendy"
Ети два способа как раз и не должньІ возвращать один и тот же результат. Кто сказал, что рабочая директория должна бьІть той же, где лежит исполняемьІй файл? Например, в линках виндьІ (.lnk) можно задать её другую, и именно её вернёт QDir::current() и именно там (по логике вещей) программа должна брать необзодимьІе ей файльІ. Кроме того, рабочую директорию можно изменить из самой программьІ QDir::setCurrent().

QCoreApplication::applicationDirPath() всегда указьІвает на реальную директорию исполняемого файла. Может использоваться, например, для чтения манифеста.

Читаем мой пост внимательно, я писал ->
Цитировать
получим текущую директорию приложения, при условии что она не изменялась программистом вручную

ее меняет VS ->
Цитировать
А именно VS в качестве рабочей дериктории программы подсунет приложению директорию проекта

Цитата: "Dendy"

А вот проблема с регистрами скорее всего действительно баг. Лучше сообщить Троллям.

Думаю троли в данном конкретном случае не причем, похоже что Qt получает эту строчку от VS, ибо писалось ->
Цитировать
В случае если приложение будет запущено не из под VS, оба этих способа вернут идентичные результаты вплоть до регистра символов.
Записан
Dendy
Гость
« Ответ #6 : Октябрь 24, 2006, 19:28 »

Просто мне кажется Qt сама должна менять регистр.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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