错误地使用了当前的工作目录......哪里是我的数据库?

时间:2015-09-12 00:11:15

标签: macos

我知道为SQLite数据库设置数据库名称意味着设置DB文件的路径。 我这样设置:

db.setDatabaseName("DienstplanerDB.sqlite");
  • 这是错误的

  • 这不是它的完成方式

  • 但我做到了

不知何故,它有效,但我无法通过Finder或Spotlight找到创建的文件。

修改

这是在应用程序包中,请参阅下面的答案以获取信息。 另外,请参阅Kuba Ober&Gombat的答案以获得有用的建议。

3 个答案:

答案 0 :(得分:1)

sudo find / -name "DienstplanerDB.sqlite"吐出数据库是在应用包中创建的。

如果要访问它,请右键单击" YourPorgram.app"并选择"显示包内容"

可以在Contents / MacOS / yourDatabase.db

中找到数据库

答案 1 :(得分:1)

应保存在当前目录中。要获得它,请使用QDir::currentDirectory()

答案 2 :(得分: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

现在你找到了它:你不应该,因为这是一个错误的问题。无论发生在哪里都是你无法控制的。为什么您希望GUI流程的初始工作目录特别适用?别。就这么简单。你无法控制它(zip,nada,zero,really)。如果您希望找到相对于工作目录的内容,您必须先自己设置它以指向某个有用的地方。然后毫无疑问,事物的位置。使用QStandardPaths为您的数据库获取与平台无关的位置 - AppDataLocationAppLocalDataLocation将是一个不错的选择。确保首先通过QCoreApplication::setApplicationName设置应用程序名称。

正确开发的应用程序不能假设任何初始工作目录是可写的(甚至是可读的),也不能假定它具有任何特定值。通常,在OS X上,应用程序包不可写,就像安装文件夹不在Windows上一样。仅仅因为你可以在开发人员设置中随意涂鸦并不意味着你的用户可以,或者这是明智之举。

以下是您的代码对您的用户所做的:他们有一个来自Yoyodyne,Inc。的YodelAbteilung Deutschland的系统。它有一个DienstplanerDB.sqlite,价值10万欧元的数据藏在一个安全的地方。您是否认真地相信自己是地球上唯一使用sqlite或处理名单的人?!既然你在任何地方写作,你都会覆盖它。你被起诉要求赔偿。这是正确的。

请不要破坏用户的数据。