在安卓设备上找不到使用 QStandardPath 创建的文件
Cannot find files created using QStandardPath on android device
我正在使用Qt 5.15.0在Android上开发一个应用程序。我的应用程序使用QStandardPaths::AppDataLocation创建一个数据库和一些其他文件。从代码端一切正常:调试输出让我认为文件在那里并且应用程序正在使用它们。问题是,当我从智能手机文件夹内的PC搜索时,我找不到创建的文件。所以这让我觉得我没有写到我期望的文件夹。
这是我的代码:
appDataPath = QStandardPaths::writableLocation(QStandardPaths::AppDataLocation);
QDir directory;
if (!directory.exists(appDataPath + QStringLiteral("/DATABASE")))
directory.mkpath(appDataPath + QStringLiteral("/DATABASE"));
if (!directory.exists(appDataPath + QStringLiteral("/DATA")))
directory.mkpath(appDataPath + QStringLiteral("/DATA"));
qDebug() << "Percorso: " << appDataPath << " dir exists:" << directory.exists(appDataPath + QStringLiteral("/DATABASE"));
QFile f( appDataPath + "/DATABASE/Prova.txt" );
if( f.open( QIODevice::WriteOnly ) )
{
f.write( "Ciao" );
f.close();
}
if( f.error() != QFileDevice::NoError )
qDebug() << QString("Error writing file '%1':").arg(appDataPath + "/DATABASE/Prova.txt") << f.errorString();
我还编写了一个在启动时读取的文件,我可以从中读取,因此我假设该文件存在并且不会保存为临时文件。 输出为:
D/MyApp(17849): Percorso: "/data/data/org.qtproject.example/files" dir exists: true
现在我想我可以在这个文件夹中的手机内部的这个目录中找到我的文件:
Questo PCSamsung Galaxy J3 (2016)PhoneAndroiddataorg.qtproject.examplefiles
但是里面没有目录或文件。我敢打赌我错过了一些琐碎的事情。
我授予应用程序以下权限:
android.permission.WRITE_EXTERNAL_STORAGE
android.permission.READ_EXTERNAL_STORAGE
有人可以帮助我吗? 提前感谢!
似乎
QStandardPaths::AppLocalDataLocation, QStandardPaths::AppDataLocation
不要提供应用文件夹的正确路径。我在Qt 5.14.1中遇到了同样的问题。虽然QStandardPaths给了我
/data/user/0/com.mycompany.myapp/files
通过QAndroidJniObject对Java端的调用给了我
/storage/emulated/0/Android/data/com.mycompany.myapp/files
使用后者,所有目录和文件都已正确创建。我建议尝试我的解决方法
QtNative.activity().getExternalFilesDir(null).getAbsolutePath();
在添加的java类中,并通过QAndroidJniObject调用它,或者将其作为错误报告给Qt。 尽管如此,对于我不知道的问题,可能还有另一种解决方案。
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用std::multimap迭代器创建std::list
- 在全局变量中保存类的实例以重新创建类(创建"backup")
- 使用CMake创建QML插件
- 如何在c++中为模板函数实例创建快捷方式
- 在C++中,是否可以基于给定的标识符创建基类的新实例,反之亦然
- 创建一个函数以在输入为负数或零时输出字符串.第一次执行用户定义的函数
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 试图在visual studio上用C++创建一个桌面应用程序
- std::threads可以从Windows DLL中的全局变量创建/销毁吗?
- 如何在C++20中创建模板别名的推导指南
- 如何为模板化对象创建模板向量?VS正在投掷C3203
- 如何创建一个空的全局类并在启动时实例化它
- 无法创建抽象类的实例
- 链接到自行创建的dll失败
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++类内存结构中创建"spacer"?
- 终端不会为C++文件创建.exe文件吗
- 在安卓设备上找不到使用 QStandardPath 创建的文件