应用程序在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在同一目录内?

+0

您是否尝试过'“./”',当前工作目录?那我怎么在Android上做同样的事情。由于应用程序已被沙箱化,应用程序启动的目录可能位于应用程序文件沙箱内。 –

+0

事实证明'QStandardPaths :: writableLocation(QStandardPaths :: AppDataLocation)'返回应用程序文件夹,但我必须在ios上为它添加'/ Documents',正如我所说的。 **但是最重要的学习**是,如果路径不存在,我通过使用'QDir :: mkpath'创建它,就像全新的安装一样。我正在尝试'mkdir',它无法创建任何文件夹。似乎'QDir :: mkpath'比使用其他任何东西来创建文件夹更好。我现在可以将它保存在ios&android的应用程序沙箱中 –

我有同样的问题,例如我创建了一个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中被拒绝。