文件系统常见问题

Copyright © Quectel Wireless Solutions Co., Ltd. 2026. All rights reserved.


为什么文件打不开?

路径格式用错了

qosa_vfsqcm_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_statvfsqcm_file 的磁盘信息接口确认可用空间

  • 对大文件写入前先做容量检查

  • 不要把文件系统剩余空间全部吃满

文件系统只读

VFS支持只读重挂载标志:

  • QOSA_MS_RDONLY

如果文件系统当前处于只读状态,创建、删除、重命名、写入都会失败,常见表现包括:

  • 返回只读相关错误

  • qcm_file 返回 QCM_FILE_IS_READONLYQCM_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