You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 21:15:40