我在 iOS &上使用 Qt app 想要将文件保存到应用程序的私人目录,以便其他应用无法访问我的文件。阅读文档here,数据容器下的{
"userAuth": {
"userId001": {
"userRNGId": "abc123",
"userEmail": "example01@gmail.com"
},
"userId002": {
"userRNGId": "abc123",
"userEmail": "example02@gmail.com"
}
},
"userList": {
"abc123": {
"userName": "James",
"occupation": "Programmer",
"userAccounts": {
"userId001": {
"userAuth": "userId001"
},
"userId002": {
"userAuth": "userId002"
}
}
}
}
}
目录看起来是保存应用程序私有文件的路径。
首先我选择使用返回的/Documents
QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
。但后来我发现我无法在那里创建任何文件。在App文件夹中也尝试了/var/mobile/Containers/Data/Application/123XX-XXXX-XXXX-XXXX/Library/Application Support/MyApp
。但徒劳无功。
其次我尝试/Documents
返回QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)
。我能够创造&在这里保存我的文件。
在iOS上,这是创建应用程序专用文件的正确途径吗? 如何使用Qt获取路径?
以某个ID为/var/mobile/Containers/Data/Application/123XX-XXXX-XXXX-XXXX/Documents
命名的目录,这是应用程序目录还是同一目录中的123XX-XXXX-XXXX-XXXX
?
答案 0 :(得分:1)
我有同样的问题,例如我创建了一个sqlite文件。但是您将创建的文件可以是您想要的每个文件。在我的示例中,我需要创建一个sqlite文件。
我这样解决了:
QString dbName = "mydb.sql";
QString dbLocation;
#ifdef Q_OS_ANDROID
dbLocation = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
#endif
#ifdef Q_OS_IOS
dbLocation = QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation);
#endif
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName(dbLocation + "/" + dbName);
qDebug() << db.database(dbLocation + "/" + dbName);
qDebug() << db.databaseName();
现在你可以保存文件,我使用DocumentsLocation获取路径,总是在iOS上工作,但不能在Android上工作,准备好Android你使用另一条路径:AppDataLocation。 在文档位置,您可以在iOS上编写/读取/放置和创建文件。 在AppDataLocation位置,您可以在Android上编写/读取/放置和创建文件。 DocumentsLocation中的权限未被拒绝。