Android 11下用户删除文件后应用无法重建文件的问题求助
Android 11下用户删除文件后无法重建的问题原因及解决方法
问题原因
Android 11 即使启用了android:requestLegacyExternalStorage="true",系统媒体存储的缓存机制仍会触发异常:当用户通过系统Files应用删除文件后,系统的媒体数据库可能未及时同步更新,残留了该文件的记录。此时Qt的QFile::open(QFile::WriteOnly)调用底层系统API时,系统会误判文件仍存在,从而返回“文件已存在”的错误,但实际物理文件已经被删除。
解决方法
- 强制删除后再创建:在调用
open前主动执行删除操作(即使文件实际不存在,QFile::remove()也不会报错),确保系统层面的文件记录被清理:QFile file(path); // 先清理可能存在的"幽灵文件"记录 file.remove(); bool isOk = file.open(QFile::WriteOnly); - 使用明确的打开模式组合:结合
QFile::Create和QFile::Truncate模式,强制覆盖或创建文件,规避系统缓存干扰:bool isOk = QFile(path).open(QFile::WriteOnly | QFile::Create | QFile::Truncate); - 同步媒体数据库(进阶方案):如果前两种方法无效,可通过JNI调用Android原生API,清除媒体数据库中对应文件的记录,再执行Qt的文件创建操作。示例Android原生代码如下:
ContentResolver resolver = context.getContentResolver(); resolver.delete(MediaStore.Files.getContentUri("external"), MediaStore.Files.FileColumns.DATA + "=?", new String[]{path});
内容的提问来源于stack exchange,提问作者Alexander Dyagilev
相关产品推荐
相关产品推荐

