iOS上的应用程序专用目录,可以访问Qt API中的文件创建

时间:2017-07-17 21:04:47

标签: ios iphone qt file ipad

我在 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

1 个答案:

答案 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中的权限未被拒绝。