Russian Qt Forum

Qt => Общие вопросы => Тема начата: SLiDER от Октябрь 24, 2006, 10:56



Название: Visual Studio пути и регистр символов
Отправлено: 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


Название: Visual Studio пути и регистр символов
Отправлено: bigirbis от Октябрь 24, 2006, 11:20
Лично я стараюсь не работать с путями в чистом виде. Лучше работать с QDir/QFile/QFileInfo. Если надо, то потом из них пути уже доставать, сравнивать и пр.


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

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

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


Название: Visual Studio пути и регистр символов
Отправлено: Alex03 от Октябрь 24, 2006, 13:26
А какой д.б. регистр у буквы диска?
ИМХО винде по барабану.


Название: Visual Studio пути и регистр символов
Отправлено: Dendy от Октябрь 24, 2006, 13:29
Винде может бьІть по барабану, но если тьІ сам соберёшься сравнивать пути в программе, то регистронезависимоть и слешенезависимость виндьІ вьІлезут окаким боком. Ибо один и тот же путь можно трактовать многими записями.


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

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

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

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

Цитата: "Dendy"

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

Думаю троли в данном конкретном случае не причем, похоже что Qt получает эту строчку от VS, ибо писалось ->
Цитировать
В случае если приложение будет запущено не из под VS, оба этих способа вернут идентичные результаты вплоть до регистра символов.


Название: Visual Studio пути и регистр символов
Отправлено: Dendy от Октябрь 24, 2006, 19:28
Просто мне кажется Qt сама должна менять регистр.