Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++ Qt
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.72/18: Рейтинг темы: голосов - 18, средняя оценка - 4.72
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
1

Относительный путь к файлу

28.12.2018, 14:42. Просмотров 3749. Ответов 21
Метки нет (Все метки)

Привет. Как мне правильно указать путь к файлу с моей БД?
C++ (Qt)
1
db.setDatabaseName(QDir::currentPath() + "/dictionaryDB.db");
так не работает
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.12.2018, 14:42
Ответы с готовыми решениями:

Путь к файлу
Считываю в Qt из excel таблицы. Пусть указан так, на диске D сразу файл "D:\\doc.xlsx" Как...

Получить путь к файлу
Всем привет. возникла такая ситуация. пытаюсь получить путь к файлу, зная его название. file -...

QUrl путь к файлу в папке
Здравствуйте! Программа создает папку в корне проекта, куда пишутся файлы после обработки. Есть...

QOpenFileDialog -> Путь к файлу содержит Кириллицу
День добрый. Имеется следующий код: QString fileName = QFileDialog::getOpenFileName( this,...

QTreeView как получить путь к файлу
Как получить путь к выеделенному файлу и поместить в переменную QString? #include "MyDirModel.h"...

21
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
28.12.2018, 14:55 2
C++ (Qt)
1
db.setDatabaseName(QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/dictionaryDB.db");
Однако уточню кое-что важное, с чем сам буквально вчера столкнулся. Если этот файл БД вы будете сразу поставлять с exe-шником программы, то так можно делать. Однако, если вы планируете создавать этот файл программно, в зависимости от каких-то действий юзера, то лучше его сохранять в папке <USERPROFILE>/AppData/Local/<program's name>. Это более правильный подход. Для этого делайте так:

C++ (Qt)
1
2
QProcessEnvironment env(QProcessEnvironment::systemEnvironment());
settingDirPath = QDir::toNativeSeparators(env.value("USERPROFILE") + "/AppData/Local/My Program");

По поводу хранения настроек программы
И это тоже
1
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
28.12.2018, 16:26  [ТС] 3
FRIEND_, все круто, ток не работает. Пробовал по два слэша ставить и в др сторону, но результата нет
БД не меняется, это просто словарь, так что пробовал первый метод.
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
28.12.2018, 16:32 4
C++ (Qt)
1
qDebug() << QDir::toNativeSeparators(QApplication::applicationDirPath()) + "/dictionaryDB.db";
Посмотрите, какой путь выведет. Возможно, нужно убрать / перед dictionaryDB.db
0
28.12.2018, 16:32
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 10:45  [ТС] 5
Цитата Сообщение от FRIEND_ Посмотреть сообщение
Посмотрите, какой путь выведет. Возможно, нужно убрать / перед dictionaryDB.db
показывает путь ...QtCreator\\bin\\build-untitled1-Desktop-Debug\\debug\\dictionaryDB.db - там есть файл с этой БД, но он весит 0 байт. Папку эту (build-untitled1-Desktop-Debug) удалял, но все равно ссылается туда.
А проект лежит совсем в другом месте, на этом же диске, но не в папке с QtCreator и запускаю я его из этого места.
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 11:19 6
Такое чувство, что файл *.pro. user ссылается туда. Попробуйте удалить его, удалять папку со сборкой, настроить проект и скомпилировать опять.
0
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 11:41  [ТС] 7
Цитата Сообщение от FRIEND_ Посмотреть сообщение
Такое чувство, что файл *.pro. user ссылается туда. Попробуйте удалить его, удалять папку со сборкой, настроить проект и скомпилировать опять.
удалил всё, скачал с git проект без *.pro, настроил, но путь снова такой же.
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 11:54 8
Такое чувство, что файл *.pro. user ссылается туда. Попробуйте удалить его, удалять папку со сборкой, настроить проект и скомпилировать опять.

Добавлено через 45 секунд
Простите, Интернет плохой, ответил дважды.

Добавлено через 1 минуту
Вы файл *.pro.user удалили? Вы написали о *.pro файле, но он тут ни при чем.
0
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 12:06  [ТС] 9
Цитата Сообщение от FRIEND_ Посмотреть сообщение
Вы файл *.pro.user удалили? Вы написали о *.pro файле, но он тут ни при чем.
*.pro.user, простите.
Попробую дома еще. Сейчас на работе всё это делаю, тут часто работает всё не так, как на домашнем пк или ноуте.
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 13:51 10
Кстати, попробуйте посмотреть путь к вашему exe во время его выполнения:
C++ (Qt)
1
qDebug() << QDir::toNativeSeparators(QApplication::applicationFilePath());
Так вы узнаете, где выполняется ваш exe-шник и во время работы программы загляните в ту папку, что вам выведется
0
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 14:09  [ТС] 11
FRIEND_, я сейчас пробую QDir::currentPath() + "/dictionaryDB.db";
Вроде что-то получается...

Добавлено через 7 минут
FRIEND_, пробуя currentPath() он обращается к папке с проектом, но создает до папки с проектом папку "build-untitled1-Desktop-Debug", там, при команде db.setDatabaseName, создает файл с названием моей бд, но она имеет нулевой размер и, соответственно, никак не реагирует.
C++ (Qt)
1
db.setDatabaseName(QDir::currentPath() + "/dictionaryDB.db");
никак не хочет обращаться напрямую к файлу.

Добавлено через 5 минут
*путь к проекту: C:\system\proects\qt\dictionary\Qt_Dictionary
*куда обращается: C:\system\proects\qt\dictionary\build-untitled1-Desktop-Debug
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 14:18 12
Кажется, я вас понял. Естественно, ваш проект лежит в одной папке, но при выполнении Qt создает другую папку build-<project name>-<app type>-<Debug or Release>, которая создается там, где вы указали при настройке проекта. При работе ваш exe-шник берет информацию не из папки, где лежат ваши .cpp и .h, а с build-<project name>-<app type>-<Debug or Release>. Поэтому вашу БД вам нужно поместить в папку debug внутри папки build-<project name>-<app type>-<Debug or Release> или просто в саму папку build-<project name>-<app type>-<Debug or Release>.
1
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 14:21  [ТС] 13
Цитата Сообщение от FRIEND_ Посмотреть сообщение
Так вы узнаете, где выполняется ваш exe-шник и во время работы программы загляните в ту папку, что вам выведется
C++ (Qt)
1
qDebug() << QDir::toNativeSeparators(QApplication::applicationFilePath());
обратился сюда: C:\\system\\proects\\qt\\dictionary\\build-untitled1-Desktop-Debug\\debug\\untitled1.exe
сейчас при выполнении
C++ (Qt)
1
qDebug() << QDir::toNativeSeparators(QApplication::applicationDirPath() + "/dictionaryDB.db");
обратился уже не к папке с Qt
путь: C:\\system\\proects\\qt\\dictionary\\build-untitled1-Desktop-Debug\\debug\\dictionaryDB.db

Добавлено через 2 минуты
Цитата Сообщение от FRIEND_ Посмотреть сообщение
Поэтому вашу БД вам нужно поместить в папку debug внутри папки build-<project name>-<app type>-<Debug or Release> или просто в саму папку build-<project name>-<app type>-<Debug or Release>.
понятно, получается мне на git нужно заливать и папку build-<project name>-<app type>-<Debug or Release>?
1
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 14:23 14
Ни в коем случае. Просто заливайте туда все необходимые файлы, БД, карткинки, переводы и т.д. Но просто при запуске приложения у себя в нужную папку переносите все доп. ресурсы (БД, картинки, переводы). Теперь все заработало?
1
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 14:40  [ТС] 15
Цитата Сообщение от FRIEND_ Посмотреть сообщение
при запуске приложения у себя в нужную папку переносите все доп. ресурсы
работодатель требует отобразить свои проекты на github, наверное это некорректно, если для работы программы необходимо перетаскивать файлы?

Добавлено через 4 минуты
Цитата Сообщение от FRIEND_ Посмотреть сообщение
Теперь все заработало?
да, но перетаскивать файлы не хотелось бы заставлять людей, чтобы они могли проверить работу моей скудной проги.
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 14:45 16
Лучший ответ Сообщение было отмечено Джон Кофи как решение

Решение

Тогда собери все необходимое в установочный файл и залей exe-шник на github, хоть это тоже не совсем корректно. + Часто смотрят на качество кода, а не на саму программу. Inno Setup - хороша программа для создания инсталяторов для Винды.
1
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
29.12.2018, 14:47  [ТС] 17
FRIEND_, спасибо, что помог) я как раз сейчас читаю "как создать инсталлятор Qt"
0
FRIEND_
65 / 25 / 8
Регистрация: 09.02.2017
Сообщений: 175
29.12.2018, 14:49 18
Ну, можешь разобраться и в их собственном инсталяторе http://doc.qt.io/qtinstallerframework/
1
Джон Кофи
77 / 15 / 3
Регистрация: 05.04.2018
Сообщений: 395
Завершенные тесты: 2
09.01.2019, 16:26  [ТС] 19
Привет. А если создать каталог с ресурсами и туда поместить свои БД, как тогда к ней (базе данных) обращаться? см. скрин с ресурсами.
мой .pro
Кликните здесь для просмотра всего текста
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
QT       += core gui widgets sql
 
TARGET = untitled1
TEMPLATE = app
 
# The following define makes your compiler emit warnings if you use
# any feature of Qt which has been marked as deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
 
# You can also make your code fail to compile if you use deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # disables all the APIs deprecated before Qt 6.0.0
 
CONFIG += c++11
 
SOURCES += \
        main.cpp \
        mainwindow.cpp \
        secondwindow.cpp \
        topics.cpp
 
HEADERS += \
        mainwindow.h \
        secondwindow.h \
        topics.h
 
FORMS += \
        mainwindow.ui \
        secondwindow.ui \
        topics.ui
 
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
 
RESOURCES += \
    resources.qrc

.cpp обращение к БД
C++ (Qt)
1
db.setDatabaseName(":/Databases/dictionaryDB.db");
так не работает.
0
Миниатюры
Относительный путь к файлу  
TRam_
зомбяк
1124 / 835 / 257
Регистрация: 14.05.2017
Сообщений: 2,789
09.01.2019, 16:37 20
Джон Кофи, ну нельзя сделать редактируемую базу данных внутри исполняемого файла (а ресурсы находятся именно в нём). Большинство операционных систем запрещают модификацию исполняющегося кода (в том числе и в вышеприведённом случае). Должен быть отдельный файл с базой данных.

Добавлено через 1 минуту
Либо жонглировать с несколькими процессами, которые файлы друг друга изменяли, но тут будут вопросы со стороны антивируса и т.д.
1
09.01.2019, 16:37
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.01.2019, 16:37

Qt file path - не удается получить путь к файлу
QModelIndex index = ui-&gt;treeView-&gt;currentIndex(); QFileSystemModel fileModel; name =...

Как программно задать путь к файлу #include ?
Здравствуйте. Есть библиотека, моя. В ней нужно загружать конфиг-файл вызывающей, основной проги....

Относительный размер шрифта на QPushButton
Я пиши игру Угадай &quot;ЧтоУгодноПоКартинке&quot;. У меня есть картинка и шесть кнопок. Три вверху и три...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru