2015-09-12 2 views
1

Я знаю, что установка имени базы данных для базы данных SQLite означает установку пути к файлу базы данных. я поставил его так:Использовал текущий рабочий каталог по ошибке ... Где находится моя база данных?

db.setDatabaseName("DienstplanerDB.sqlite"); 
  • это неправильно

  • это не так, как это делается

  • , но я сделал это

И как-то это но я не смог найти созданный файл через Finder или Spotlight.

EDIT

Это было в пакете приложения, см мой ответ ниже для получения информации. Также см. Ответы Кубы Обера и Гомбата за полезные советы.

+0

В текущем рабочем каталоге * когда * был запущен исполняемый файл? – user2864740

+0

@ user2864740 это будет каталог, доступный для прожектора и поиска, не так ли? В противном случае, есть ли у вас идея, когда текущий рабочий каталог будет использоваться при использовании qt (это не каталог dir ..)? – Barthy

+0

Я подозреваю, хотя у меня нет опыта в OS X! - что если он был запущен из самого искателя, CWD может быть «домашним каталогом» (например, результатом 'cd $' в оболочке). – user2864740

ответ

1

a sudo find/-name "DienstplanerDB.sqlite" подскажите, что база данных была создана в пакете приложений.

Если хотите, то щелкните правой кнопкой мыши по "YourPorgram.app" и выберите "Просмотр содержимого пакета".

База данных может быть найден в Содержание/MacOS/yourDatabase.db

1

Это не имеет никакого отношения к sqlite. Или даже Qt. Или OS X.

Следующий проект делает то же самое на всех платформах.

// main.cpp 
#include <fstream> 

int main() { 
    std::ofstream{"DienstplanerDB.sqlite"} << "Ooops" << std::endl; 
} 
# project.pro (no Qt frameworks are linked to the executable) 
CONFIG -= qt 
CONFIG += c++11 
TARGET = write-bundle-con-32533822 
TEMPLATE = app 
SOURCES += main.cpp 

Теперь, когда вы нашли его, вы не должны, потому что это неправильный вопрос. Где бы это ни было, это не под вашим контролем. Почему вы ожидаете, что исходный рабочий каталог вашего графического интерфейса будет чем-то конкретным? Не. Это так просто. У вас нет контроля над ним (zip, nada, zero, really). Если вы хотите найти что-то по отношению к рабочему каталогу, вы должны сначала установить его, чтобы указать что-то полезное. Тогда нет никаких сомнений относительно того, где вещи. Используйте QStandardPaths, чтобы получить независимое от платформы место для вашей базы данных - AppDataLocation или AppLocalDataLocation - хороший выбор. Убедитесь, что вы сначала задали имя приложения через QCoreApplication::setApplicationName.

Правильно разработанное приложение не может предполагать, что любой начальный рабочий каталог доступен для записи (или даже читается) или что он имеет какое-либо конкретное значение. Как правило, в OS X набор приложений не доступен для записи, так же как папка установки не находится в Windows. Просто потому, что вы можете писать все это в настройках разработчика, это не значит, что ваши пользователи могут или что это разумно.

Вот что ваш код сделал только с вашим пользователем: у них была система Yoyodyne, Inc. YodelAbteilung Deutschland. Он имел DienstplanerDB.sqlite с данными за 10 000 долларов, заправленными в безопасное место. Вы всерьез полагали, что вы единственный человек на планете, использующий sqlite или занимающийся реестрами ?!Поскольку вы пишете где бы вы ни находились, вы просто перезаписали его. Вы получаете иск за ущерб. Справедливо.

Не повреждайте данные ваших пользователей, пожалуйста.

+0

Мне действительно не нравится ваш способ «ответить» на этот вопрос, на который уже был дан ответ. Вы можете дать совет, за что я благодарен. Но, пожалуйста, оставайтесь здоровыми и не бросайте случайные обвинения людям. Как указано в вопросе, я знаю, что это был даже не путь. Я знаю, что это была ошибка, но почему-то это сработало, и я хотел выяснить, почему и где. Никто никогда не спрашивал о правильности. И так как все это произошло, работая с qt на osx с базой данных sqlite, да, это все имеет к этому какое-то отношение. Я ценю, что вы пытаетесь помочь. Но на этот вопрос дан ответ. – Barthy

+1

@BarthyB. Во-первых, нет предела количеству ответов. Просто потому, что вы получили ответы, не запрещает другим предоставлять больше. Тогда есть проблема минимизации - бросать вещи из вопроса до тех пор, пока ничего не останется. Вы получили бы тот же результат, если бы у вас был однострочный основной, Qt или sqlite нигде, кроме созданного qmake файла makefile, который создает пакет приложений. Минимизация является важной частью любого процесса отладки. Это один из основных способов определить, что не так. Неинтегрированные вопросы создают ненужный шум в не связанных тегах. –

Смежные вопросы