文件系统常见问题¶
Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.
为什么文件打不开?¶
路径格式用错了¶
qosa_vfs 和 qcm_file 的路径风格不同:
qosa_vfs 建议使用真实绝对路径,例如 /user/test.txt、/data/log/app.log。
qcm_file 优先使用逻辑前缀路径,通常以UFS:、DATA:、FOTA:、SD:、EXTNOR: 开头。
父目录不存在¶
文件创建前如果父目录不存在,open或write很可能失败。
例如:
/user/logs/app/app.log
如果 /user/logs/app/ 没有先创建,直接创建文件可能失败。
建议先调用目录创建接口:
qosa_vfs_mkdir
qcm_file_mkdir 类接口
为什么创建文件或写文件失败?¶
存储空间不足¶
当前仓库保留了文件系统预留空间配置:
CONFIG_QOSA_FILE_CONFIG_RESERVE_SIZE
它主要用于NV存储预留。即使看起来还有剩余空间,也可能因为预留区策略导致业务写入失败或可用空间比预期小。
建议:
使用 qosa_vfs_statvfs 或 qcm_file 的磁盘信息接口确认可用空间
对大文件写入前先做容量检查
不要把文件系统剩余空间全部吃满
文件系统只读¶
VFS支持只读重挂载标志:
QOSA_MS_RDONLY
如果文件系统当前处于只读状态,创建、删除、重命名、写入都会失败,常见表现包括:
返回只读相关错误
qcm_file 返回 QCM_FILE_IS_READONLY 或 QCM_FILE_DEVICE_READONLY
底层errno可能是EROFS
文件名或路径太长¶
当前仓库存在两类长度限制:
VFS绝对路径最大长度:QOSA_VFS_PATH_MAX = 192
qcm_file 路径长度由文件名长度、目录长度和前缀长度共同决定
一旦超长,可能出现:
open失败
stat失败
返回exceeded max length或invalid file name一类错误
建议:
控制目录层级
日志文件名不要叠加过长时间戳和业务标识
打开的文件太多¶
qcm_file 显示定义了“达到最大打开文件数量”的错误码:
QCM_FILE_REACH_MAX_OPENFILE_NUM
部分平台还定义了底层“打开文件过多”的平台错误。
建议:
每次打开后及时关闭
出错路径也要关闭fd或文件句柄
长时间运行任务避免句柄泄漏
为什么读文件返回0或读不到完整内容?¶
已经读到文件末尾¶
如果之前已经读取过,当前文件偏移可能已经在EOF位置。再次读取返回0是正常表现。
处理方法:
调用 qosa_vfs_lseek(fd, 0, QOSA_VFS_SEEK_SET)
或重新打开文件
文件大小判断不准确¶
建议读取前先用:
qosa_vfs_stat
qosa_vfs_fstat
先确认文件大小,再按需分配缓冲区。
读取接口返回的是“实际读取字节数”¶
qosa_vfs_read 的返回值是实际读到的字节数,不保证一定等于传入的count。
为什么删除目录失败?¶
最常见原因是目录非空。
如何查看当前已经挂载的文件系统?¶
VFS 提供了挂载点查询接口:
qosa_vfs_mount_count
qosa_vfs_mount_points