实例介绍
此文档为FATFS使用的简单说明,简洁易懂,有实例使用说明
例程:这段程序先打开文件火 folde/move,然后查掞其中的存档文件,并通过串凵输出 读取的文件名 if (f_opendir( &dirs, folder/move )==FR_OK) 打开文件夹 while(f_readdir(&dirs, &finfo)== FR_ OK ∥按照顺序读文件夹 if( finfo fname[On) break ∥如果文件名为0结東 if(finfo attrib == AM_ARC) ∥判断文件属性 Debug("文件名%srn, finfo fname); 串口输出如下: 夏件名1t.115 立件名:a1am1.wav 文件名:456.bc 在PC上查看SD卡 G: \folder \move 我的文档 1s 我的电脑 WIRKP (C: PK0①: 可以看到,程序输出了后面三个文件的名称,对文件夹没作处理,因为在程序里 对文件属性进行了判断: if( finfo. attrib= AM ARC),意思是只对存档文件进行处理 至于什么是存档文件,以下是在百度知道搜到的结果 视窗系统中文件属性有四种类型,我来告诉你这四种类型是什么意思 只读-表示该文件不能被修改 隐藏-表示该文件在系统中是隐臧的,在默认情况下用户不能看见这些文件。 系统-表示该文件是操作系统的一邹分。 存档-表示该文件在上次备份前己经修改过了,一些备份软件在备份系统后会把这些文件默 认的设为存档属性。 存档属性在一般文件管理中意义不大,但是对于频繁的文件批量管理很有帮助 更多资料见酷学玩首页:htp/wwq- sharewe. com 四.打开\新建一个文件: FRESULT f open FIL* File0b ject /* Pointer to the blank file object structure const TCHAr* FileName, sk Pointer to the file neme * bYTE ModeFlags /** Mode flags * 函数说明 此函数可以打开,或新建一个文件 2.参数说明 a)芈 FileObject:指向一个用来存储文件对象的空结构体的指针 b)* FileName:指向文件名的指针 c) Modcflags:打开方式,可以是以卜一种或儿种的组合(默认方式是 FA OPEN EXISTING Value Description FA READ 读模式,(读写模式可同时生效) FA WRITE 写模式,(读写模式可同时生效) FA OPEN EXISTING默认打开方式 FA OPEN ALWAYS 打开文件,如果文件不存在,则创建一个新文件 用此种方式,可以用 f lseek在文件后追加数据 FA CREATE NEW‖新建文件,如果文件已存在,则新建失败 FA CREATE ALWAYS新建文件,如果文件已存在,覆盖旧文件 五.读取文件: FRESULT f read FIL* FileObject, Pointer to the file object structure *, void*k Buffer Pointer to the buffer to store read data * k UINT Byte ToRead, / Number of bytes to read + UINT* Byteread Pointer to the variable to return number of bytes read * 函数说明: 1.这个函数可以读取文件的内容 2.参数说明: a)* Fileobject:指向文件对象结构体的指针 b)* Buffer:指向存储读取到的数据的缓冲的指针 c) Byte ToRead:准备读取的字节数 d)芈 Bvte Read i.它的作用就是用来检测文件的末尾,就是下面例程中的这一句: if(res ll br sizeof(buffer)) break i.每次 f read执行完后,* ByteRead值等于木次读取到的字节数,若* ByteRead < Byte ToRead,即本次读取到的宇节小于准备读取的字节,说明读指针已到达 文件末尾 更多资料见酷学玩首页:htp/wwq- sharewe. com 例程:此处参考酷学玩例程,以读取的方式打开文件,然后将文件内睿通过串凵输出。 res=f_open(&fsrC, "news/news. txt", FA_READ) if(res) Debug("open news/news. txt: odir'in", res) br=1; Debug("文什内容:") for (,) for(a=0; a<512; a++)buffer[a=0; res= f_read( &fsrc, buffer, sizeof(buffer), &br) Debug("%osrin", bufTer) if (res l br< sizeof(buffer)break; /error or eof f closet&fsrc);∥不论是打开,还是新建文件,一定记得关闭 运行后串∏输出结果: 磁盘初始化:0 挂载磁盘:0 open news/news. txt: 0 文件内 球网记 者宋伟钢报 《朝鲜日报》9月27 称,该报记者获悉,朝鲜领导人金正 日的三子金正银被推选为人民 将参加28日举行的 动党代表大会。 下面是在PC查看: DOG: Inews 件和文件夹任务 mews. txt 文本文档 创建一个新文件夹 将这个文件夹发布到 deb ners. txt-记事本 共享此文件夹 文件¢)编辑)格式血〕查看①帮助Q 环球网记者末伟钢报道韩国《朝鲜日报>9月27日 它位置 按道称,该报记考获悉,朝鲜领导人金正日的三子 金正银被推选为人民军党代表,将参加28日举行的 细信息 朝鲜芳动党代表大会。 更多资料见酷学玩首页:htp/wwq- sharewe. com 六.写文件 FRESULT f write FIL* FileObject /* Pointer to the file object structure *y const void* Buffer, Pointer to the data to be written * UINT ByteToWrite, Number of bytes to write s/ UINT* BrteWritten /* Pointer to the variable to return number of bytes written米 函数说明 1.此函数用来向文件中写入数据,前提是以写文件的方式打开文件 2.参数说明 a) FileObject:指向文件对象结构体的指针 b)* Buffer:指向数据缓冲的指针 c) Byte Towrite:准备写入的字节数 d) Byte written:记录已写入的字节数,用来检测是否写完 3.后两个参数的长度都是两个字节,计数值最大为6536,所以一次写入字节数最大为 64K。一般情况下一次不会写这么长的数据,因为就算RAM足够用,也不会在里面开 个几十K的数据缓冲区。 例程 结合前面的 f_open函数,在卜面例程中以写的方式新建一个txt文档,然后写入100个字节。 已定义: unsigned char buffer[00=" This is a new file, the data is just written in!这是一个新 文件,数据也是新的!; res=f_open(&fsrc, "new/New Text. txt", FA_WRITE I FA_CREATE_ALWAYS); if (res== FR_OK) Debug("create file ok r\n"); Debug(start write!r'n") res=f write(&fsrc, buffer, 100, &bw) if(res) Debug("write error: adrr\n", res): break Debug("write ok!rn ) while(bw<100);∥判断是否写完(bw>100,表示写入完成 f close(ksrc);∥关闭文件,必须和 f_ open函数成对出现 更多资料见酷学玩首页:htp/wwq- sharewe. com 运行后串口输出: 磁盘初始化:0 挂载磁盘:0 create file ok! start write 卜面为PC中查看结果: G RETTERT. txt 本文档 的文档 11B HETEXT. txt-记事本 的电脑 文件)编辑巴)格式)查看帮助⑩ 画胃IPC:) This is a new File, the data is just written PR①:) in!这是一个新文件,数据也是新的! s st E 掌握以上几个函数后,可以利用 FATES对SD卡进行基本的读写操 作了 下面介绍另外儿个常用的函数。 更多资料见酷学玩首页:htp/wwq- sharewe. com 七.移动文件指针: FRESULT f lseek FIL* File0b ject,/ Pointer to the file object structure * DWORD Offset * File offset in unit of byte */ 函数说明 此函数在对已打开的文件进行读或写时,可以移动当前指针位置 2.参数说明: a) File Object:指向文件对象结构体的指针 b)Omst:指针移动的长度 例程 参考官网作者公布的例程,木例以前文中 new/news. txt文件为基础 res =f_open(&fsrc, news/news. txt", FA_WRITEJ res f_Iseek (&fsrc, 500) 〃指针指向第500个字节 res f write(&fsrc, 500", 3, &bw); res=f_Iseek(&fsrc, fsrc. fptr+100) ∥针向前移动100个字节 res =f_write(&fsrc, "forward", 8, &bw) res=f_Iseek(&fsrc, fsrc. fptr-200) ∥H指针向后移动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中查看结果:红色部分为笔者注 eW写,txt 文本文档 news.txt-记事本 文件)编辑)格式@查看)帮助⑩ 怀球网记者宋报道国《朝鲜日报》。月27日报 银被推选为人民车党代表,将多加28日举行的朝藓劳 动党代表大会。 3再向后移动200个字节一 backward 1.指针先移到第500字节处一58 2接着向前移动100个宇节一f0 rward end 4.最后移到文件末尾处 写en之前的末尾 更多资料见酷学玩首页:htp/wwq- sharewe. com 八.截断文件 FRESULT f truncate FIL* File0b ject / Pointer to the file object * 函数说明 1.此函数可以在将文件在当前指针处截断 2.参数说明 a)* Fileobject:指向文件对象结构体的指针 此函数可以載断文件,也可以延长文件长度 例程:以上节 news/news.txt为基础,木段程序可将文件在指定长度处截断 res=f_open(&fsrc, news/news. txt", FA_ WRITE) res=f_lseek(fsrc, 60); ∥指针指向第60个字节 res=f_truncate(&fsrc 〃将文件在此截断 res =fsync(&fsrc ) ∥H关闭文件 new.txt-记事本 回地址同mn 文件1编辑)格式)查看C帮助0 环球网记煮宋伟钢报道韩团《朝鲜日报》9月27日报 文本文档 记者获悉,朝鲜领导人金正日的三 银被推选为人民军党代表,将参加28日举行的朝鲜劳 动党代表大会。 类型:文本文档 大小:614字 backward 56 forward end 上图为运行程序之前在PC上查看 下图为运行程序之后,,从右面文件夹中可以看出,文件大小变成了60个字节 nevs.txt-记事本 口X地址06lm 文件)编C)格式①)查看)帮助0 血ews.txti 环球网记煮末伟钢报道韩国《朝鲜日报》9月27日报三本文档 道称,该报记者 类型:文本文档 大小:60字节 更多资料见酷学玩首页:htp/wwq- sharewe. com 九.刷新缓存信息 FRESULT f sync FIL* File0b ject / Pointer to the file object * 函数说明 1,此函数功能兼容 f close,它于 f close的区别就是执行后,当前文件是否仍然有效, 2.参数说明 a)* Fileobject:指向文件对象结构体的指针 3.调用此函数后,当前文件仍然可读可写可查询 4.当文件处于长时间的写模式,如数据记录时,定期调用此函数,或在写入数据后立即调用 此函数,可以减少因断电等意外情况带来的损失.有点WORD中后台定期保存的意思 十.新建文件夹: FRESULT f mkdir const TCHAR* DirName/* Pointer to the directory name * 函数说明: 新建一个文件夹 2.参数说明: a)* DirName:指向将要创建的文件夹名的指针 3.文件名应符合 fatfs标准,不能包非法字符, 4.若不支持长文件名,文件名长度不能大于8,否则新建不成功 5.例程 a) f_mkdir("new"); b) f_mkdir("folder/new") 十一.删除文件或文件夹: FRESULT f unlink const TCHAR:* FileName k pointer to the object name i 函数说明: 1.此函数可以删除一个文件或文件夹 2.参数说明: a)* FileName:指向文件或文件夹的名称的指针 3.删除文件夹时: a)不能为当前文件夹 b)不能为非空文件夹 4.删除文件时 a)不能为已打开文件 b)不能为只读文件 更多资料见酷学玩首页:htp/wwq- sharewe. com 【实例截图】
【核心代码】
标签:
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论