fatfs —— f_open() FA_CREATE_ALWAYS vs FA_CREATE_NEW 探究
来源:互联网 发布:办公主要软件 编辑:程序博客网 时间:2024/05/29 19:00
为什么设置为NEW,f_open返回FR_EXIST(认为"该文件存在"是种错误),改成ALWAYS 就返回OK?
fatfs在这里的思路是什么?
说明写着:
FA_CREATE_NEW
创建一个新文件。如果文件已存在,则创建失败。FA_CREATE_ALWAYS
创建一个新文件。如果文件已存在,则它将被截断并覆盖。
看f_open()里的这部分:
/* Create or Open a file */
if (mode & (FA_CREATE_ALWAYS | FA_OPEN_ALWAYS | FA_CREATE_NEW)) {
DWORD ps, cl;
if (res != FR_OK) {/* No file, create new */
if (res == FR_NO_FILE)
res = dir_register(&dj);
if (res != FR_OK) LEAVE_FF(dj.fs, res);
mode |= FA_CREATE_ALWAYS; //如果没文件,则创建文件,成功后自动设置为FA_CREATE_ALWAYS
dir = dj.dir;
}
else { /* Any object is already existing */
if (mode & FA_CREATE_NEW)/* Cannot create new */
LEAVE_FF(dj.fs, FR_EXIST); //如果有文件,且用户传来的设置选项为FA_CREATE_NEW,就报错。计算机的理解是:FA_CREATE_NEW为如果文件已存在则导致无法新建则而报错。
......
if (mode & FA_CREATE_ALWAYS) {/* Resize it to zero if needed */
...... //如果有文件,且用户传来的设置选项为FA_CREATE_ALWAYS,就“截断并覆盖”。计算机的理解是:FA_CREATE_ALWAYS为如果文件已存在则文件被清空。
}
实验:FA_CREATE_ALWAYS会不会把打开的文件清空?
实验结果:我去,还真是。
实验:如果不用FA_CREATE_ALWAYS 和 FA_CREATE_NEW呢?
实验结果:当该文件存在时,f_open()时没被更改。
所以,如果希望在没有该文件的时候创建,应该先f_open,且不设置选项FA_CREATE_NEW和FA_CREATE_ALWAYS。当返回值是FR_NO_FILE时,再f_open(FA_CREATE_NEW)。
- fatfs —— f_open() FA_CREATE_ALWAYS vs FA_CREATE_NEW 探究
- FATFS函数之——f_open & f_read
- FatFS f_open()函数详解
- fatfs 学习笔记--f_open用法(最新版本)
- FatFs进行f_open操作的时候返回FR_NO_FILESYSTEM原因之一
- 移植Fatfs遇到f_open返回FR_NO_FILE等问题
- fatfs里的结构体 —— 之FATFS
- FATFS移植——STM32+SDCA
- 1. FATFS 分析之——数据结构
- FATFS源码分析——内部函数
- FATFS移植——STM32+SDCARD
- FATFS移植——STM32+SDCARD
- FATFS
- FatFs
- FatFs
- FATFS
- FatFs
- 好东西——FatFs - Generic FAT File System Module
- 程序员面试宝典学习记录001
- 安装vmware ESXI(5.1)5.5时提示没有网络适配器
- Java web的几种异常处理
- ubuntu install virtualbox, cannot open
- 安装devpi
- fatfs —— f_open() FA_CREATE_ALWAYS vs FA_CREATE_NEW 探究
- data analysis tool___R 程序语言
- void与void*详解
- php的c扩展001
- hloj 1180 (模拟题)
- C语言条件编译及编译预处理阶段
- iReport 立方米(m³)的显示
- Matlab命令集——稀疏矩阵函数
- ThinkPHP模型定义