A
Air官方
rawfile 访问失败的表现形态散:读不到文件、读到的内容错、时好时坏。这篇把场景集按根因归类。
▍场景一:路径类
最常见也最便宜:路径拼接错(前导斜杠有无、目录分隔符、相对与绝对混用);大小写不一致(开发系统不敏感、设备敏感——文件名全小写加下划线的规范就是防它);中文与空格路径(部分通道处理不稳,资源名 ASCII 化)。排查:访问日志打印实际拼出的完整路径,与包内清单肉眼对比——一眼假。
▍场景二:打包类
文件根本不在包里:隐藏文件被过滤(专篇讲过);链接文件进包变样;空目录塌缩;构建生成的新资源没进打包清单。排查:解包列清单与源目录自动对比(这条防线建了就一劳永逸)。
▍场景三:访问方式类
rawfile 的正确打开方式是流式读(打开、读、关),把它当普通文件路径直接 fopen 是错的(沙箱路径视图不同——应用看到的文件系统布局与包内结构不是一回事)。需要随机访问的文件(数据库、字体索引)走首启部署模式(拷到数据目录再用标准 IO)。流式读大文件注意分块(一次读超大文件内存压力)。
▍场景四:时序类
部署未完成就访问(9001005 篇的场景二);首启中断后重来的半部署状态(部署状态记录与续传,缺了这个就是时好时坏的怪病)。排查:部署日志完整性核对加数据目录实际文件核对。
▍场景五:权限与生命周期类
应用被系统清理后数据目录的部署产物还在吗(在,但下次启动要校验);多进程访问同一部署产物的并发(文件锁或单侧部署)。
▍排查总流程
报障三件套先到手:访问日志(完整路径与错误码)、包内清单(该文件在不在)、部署日志(部署状态)。三样齐了场景自动归类。配套预防:资源访问统一封装层(一处日志、一处校验、一处缓存策略)——前面多篇反复强调的架构招式,在 rawfile 这儿又一次应验。
更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
▍场景一:路径类
最常见也最便宜:路径拼接错(前导斜杠有无、目录分隔符、相对与绝对混用);大小写不一致(开发系统不敏感、设备敏感——文件名全小写加下划线的规范就是防它);中文与空格路径(部分通道处理不稳,资源名 ASCII 化)。排查:访问日志打印实际拼出的完整路径,与包内清单肉眼对比——一眼假。
▍场景二:打包类
文件根本不在包里:隐藏文件被过滤(专篇讲过);链接文件进包变样;空目录塌缩;构建生成的新资源没进打包清单。排查:解包列清单与源目录自动对比(这条防线建了就一劳永逸)。
▍场景三:访问方式类
rawfile 的正确打开方式是流式读(打开、读、关),把它当普通文件路径直接 fopen 是错的(沙箱路径视图不同——应用看到的文件系统布局与包内结构不是一回事)。需要随机访问的文件(数据库、字体索引)走首启部署模式(拷到数据目录再用标准 IO)。流式读大文件注意分块(一次读超大文件内存压力)。
▍场景四:时序类
部署未完成就访问(9001005 篇的场景二);首启中断后重来的半部署状态(部署状态记录与续传,缺了这个就是时好时坏的怪病)。排查:部署日志完整性核对加数据目录实际文件核对。
▍场景五:权限与生命周期类
应用被系统清理后数据目录的部署产物还在吗(在,但下次启动要校验);多进程访问同一部署产物的并发(文件锁或单侧部署)。
▍排查总流程
报障三件套先到手:访问日志(完整路径与错误码)、包内清单(该文件在不在)、部署日志(部署状态)。三样齐了场景自动归类。配套预防:资源访问统一封装层(一处日志、一处校验、一处缓存策略)——前面多篇反复强调的架构招式,在 rawfile 这儿又一次应验。
更多真实移植案例,欢迎到 apps 板块翻看 56 篇《鸿蒙PC适配全记录》系列实录。
楼主
7 天前