55 "0:TestDir/testdir.txt");
56 }
57 } else {
58 printf("!! 打开文件失败:%d\n",res_flash);
59 printf("!! 或许需要再次运行“FatFs移植与读写测试”工程\n");
60 }
61 return res_flash;
62 }
首先是设备存储信息获取,目的是获取设备总容量和剩余可用空间。f_getfree函数是设备空闲簇信息获取函数,有三个形参,第一个参数为逻辑设备编号;第二个参数为返回空闲簇数量;第三个参数为返回指向文件系统对象的指针。通过计算可得到设备总的扇区个数以及空闲扇区个数,对于QSPI Flash芯片我们设置每个扇区为4096字节大小。这样很容易就算出设备存储信息。
接下来是文件读写指针定位和格式化输入功能测试。文件定位在一些场合非常有用,比如我们需要记录多项数据,但每项数据长度不确定,但有个最长长度,使用我们就可以使用文件定位lseek函数功能把数据存放在规定好的地址空间上。当我们需要读取文件内容时就使用文件定位函数定位到对应地址读取。
使用文件读写操作之前都必须使用f_open函数打开文件,开始文件是读写指针是在文件起始位置的,马上写入数据的话会覆盖原来文件内容的。这里,我们使用f_lseek函数定位到文件末尾位置,再写入内容。f_lseek函数有两个形参,第一个参数为文件对象指针,第二个参数为需要定位的字节数,这个字节数是相对文件起始位置的,比如设置为0,则将文件读写指针定位到文件起始位置了。
f_printf函数是格式化写入函数,需要把ffconf.h文件中的_USE_STRFUNC配置为1才支持。f_printf函数用法类似C库函数printf函数,只是它将数据直接写入到文件中。
最后是目录创建和文件移动和重命名功能。使用f_opendir函数可以打开路径(这里不区分目录和路径概念,下同),如果路径不存在则返回错误,使用f_closedir函数关闭已经打开的路径。新版的FatFs支持相对路径功能,使路径操作更加灵活。f_opendir函数有两个形参,第一个参数为指向路径对象的指针,第二个参数为路径。f_closedir函数只需要指向路径对象的指针一个形参。
f_mkdir函数用于创建路径,如果指定的路径不存在就创建它,创建的路径存在形式就是文件夹。f_mkdir函数只要一个形参,就是指定路径。
f_rename函数是带有移动功能的重命名函数,它有两个形参,第一个参数为源文件名称,第二个参数为目标名称。目标名称可附带路径,如果路径与源文件路径不同见移动文件到目标路径下。
文件信息获取代码清单 2511 文件信息获取
1 static FRESULT file_check(void)
2 {
3 FILINFO fno;
4
5 /* 获取文件信息 */
6 res_flash=f_stat("0:TestDir/testdir.txt",&fno);
7 if (res_flash==FR_OK) {
8 printf("“testdir.txt”文件信息:\n");
9 printf("》文件大小: %ld(字节)\n", fno.fsize);
10 printf("》时间戳: %u/%02u/%02u, %02u:%02u\n",
11 (fno.fdate >> 9) + 1980, fno.fdate >> 5 & 15, fno.fdate & 31,
12 fno.ftime >> 11, fno.ftime >> 5 & 63);
13 printf("》属性: %c%c%c%c%c\n\n",