FATFS函数浅谈 看完学会FATSFS,建议收藏

六、写文件
FRESULT f_write (FIL*FileObject, /* Pointer to the file object structure */const void*Buffer, /* Pointer to the data to be written */UINTByteToWrite, /* Number of bytes to write */UINT*ByteWritten /* Pointer to the variable to return number ofbytes written */);
函数说明:
1. 此函数用来向文件中写入数据,前提是以写文件的方式打开文件
2. 参数说明:
a) * : 指向文件对象结构体的指针
b) * : 指向数据缓冲的指针
c): 准备写入的字节数
d) * : 记录已写入的字节数,用来检测是否写完
3. 后两个参数的长度都是两个字节,计数值最大为 65536,所以一次写入字节数最大为
64K 。一般情况下一次不会写这么长的数据,因为就算 RAM 足够用,也不会在里面开一
个几十 K 的数据缓冲区 。
例程:
结合前面的函数,在下面例程中以写的方式新建一个 txt 文档,然后写入 100 个字节 。
已定义: char [100] = "This is a new file, the data is justin! 这是一个新
文件,数据也是新的!";
res = f_open(&fsrc, "new/NewText.txt", FA_WRITE | FA_CREATE_ALWAYS);if (res == FR_OK){Debug("create file ok!\r\n");Debug("start write!\r\n");do{res = f_write(&fsrc, buffer, 100,&bw);if(res){Debug("write error : %d\r\n",res);break;}Debug("write ok!\r\n");}while (bw < 100); // 判断是否写完(bw > 100,表示写入完成)}f_close(&fsrc); // 关闭文件,必须和 f_open 函数成对出现
运行后串口输出:
下面是PC中查看结果:
掌握以上几个函数后,可以利用 FATFS 对SD卡进行基本的读写操
作了 。下面介绍另外几个常用的函数 。
七、移动文件指针
FRESULT f_lseek (FIL*FileObject, /* Pointer to the file object structure */DWORDOffset /* File offset in unit of byte */)
函数说明:
1. 此函数在对已打开的文件进行读或写时,可以移动当前指针位置
2. 参数说明:
a): 指向文件对象结构体的指针
b): 指针移动的长度
例程:
res = f_open (&fsrc ,"news/news.txt", FA_WRITE);res = f_lseek (&fsrc , 500); 指针指向第 500 个字节res = f_write (&fsrc , "500" ,3 , &bw);res = f_lseek (&fsrc , fsrc.fptr + 100); 指针向前移动 100 个字节res = f_write (&fsrc , "forward" ,8 , &bw);res = f_lseek (&fsrc , fsrc.fptr - 200); 指针向后移动 200 个字节res = f_write (&fsrc , "backward" , 9, &bw);res = f_lseek (&fsrc , fsrc.fsize); 指针指向文件末尾res = f_write (&fsrc , "end" ,3 , &bw);res = f_close ( &fsrc );
运行后在PC中查看结果:
八、截断文件
FRESULT f_truncate (FIL*FileObject /* Pointer to the file object */);
函数说明:
1. 此函数可以在将文件在当前指针处截断
2. 参数说明:
a) * : 指向文件对象结构体的指针
3. 此函数可以截断文件,也可以延长文件长度
例程:以上节 news/news.txt 为基础,本段程序可将文件在指定长度处截断
res = f_open (&fsrc ,"news/news.txt", FA_WRITE);res = f_lseek (&fsrc , 60); 指针指向第 60 个字节res = f_truncate (&fsrc ); 将文件在此截断res = f_sync ( &fsrc ); 关闭文件
上图为运行程序之前在PC上查看
下图为运行程序之后,,从右面文件夹中可以看出,文件大小变成了 60 个字节.
九、刷新缓存消息
FRESULT f_sync (FIL*FileObject /* Pointer to the file object */);
函数说明: