应用程序在iOS专用目录与
我使用Qt的应用程序上的iOS &想将文件保存到应用程序的私有目录,使其他应用程序无法访问我的文件访问权限创建文件从的Qt API。通过文档here,/Documents
读取数据容器下的目录看起来是保存我的文件的路径,这些文件对于应用程序是私有的。应用程序在iOS专用目录与
首先我选择使用QStandardPaths::writableLocation(QStandardPaths::AppDataLocation)
其返回 /var/mobile/Containers/Data/Application/123XX-XXXX-XXXX-XXXX/Library/Application Support/MyApp
。但后来我发现我无法在那里创建任何文件。在App文件夹中也尝试了/Documents
。但徒劳无益。
其次我试过QStandardPaths::writableLocation(QStandardPaths::DocumentsLocation)
其中返回/var/mobile/Containers/Data/Application/123XX-XXXX-XXXX-XXXX/Documents
。我可以在这里创建&保存我的文件。
在iOS上,这是创建应用程序专用文件的正确路径吗?
如何获得使用Qt的路径?
以某个ID命名的目录为123XX-XXXX-XXXX-XXXX
,这是应用程序目录还是Library/Application Support/MyApp
在同一目录内?
我有同样的问题,例如我创建了一个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中被拒绝。
您是否尝试过'“./”',当前工作目录?那我怎么在Android上做同样的事情。由于应用程序已被沙箱化,应用程序启动的目录可能位于应用程序文件沙箱内。 –
事实证明'QStandardPaths :: writableLocation(QStandardPaths :: AppDataLocation)'返回应用程序文件夹,但我必须在ios上为它添加'/ Documents',正如我所说的。 **但是最重要的学习**是,如果路径不存在,我通过使用'QDir :: mkpath'创建它,就像全新的安装一样。我正在尝试'mkdir',它无法创建任何文件夹。似乎'QDir :: mkpath'比使用其他任何东西来创建文件夹更好。我现在可以将它保存在ios&android的应用程序沙箱中 –