ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

FATFS函数使用笔记

2021-09-18 17:30:12  阅读:257  来源: 互联网

标签:fp 文件 函数 指向 FIL 笔记 FATFS FRESULT


1.FRESULT f_opendir(DIR *dp,const TCHAR *path);
功能:打开一个目录

参数功能
dp指向空目录对象结构体的指针,用来存储即将打开的目录信息
path路径

返回值FR_OK(0)表示函数执行成功,目录对象结构体被创建,以供后面的读目录调用。
参数dp的结构体类型如下:

typedef struct {
	_FDID	obj;			/* Object identifier ,里面有个objsize记录打开文件字节大小*/
	DWORD	dptr;			/* Current read/write offset */
	DWORD	clust;			/* Current cluster */
	DWORD	sect;			/* Current sector */
	BYTE*	dir;			/* Pointer to the directory item in the win[] */
	BYTE*	fn;				/* Pointer to the SFN (in/out) {body[8],ext[3],status[1]} */
#if _USE_LFN != 0
	DWORD	blk_ofs;		/* Offset of current entry block being processed (0xFFFFFFFF:Invalid) */
	WCHAR*	lfn;			/* Pointer to the LFN working buffer */
#endif
#if _USE_FIND
	const TCHAR* pat;		/* Pointer to the name matching pattern */
#endif
} DIR;

2.FRESULT f_readdir(DIR *DirObject,FILINFO *FileInfo);
功能:读取目录下的一个文件,将文件信息存放到FileInfo里面,如果打开目录后,连续调用该函数,我们能从头到尾按顺序读取到文件,并将文件信息刷新到FileInfo里,当读到最后没有文件可读,则返回一个空字符串到文件信息对象的f_name[]里,据此可以判断目录内所有文件是否读取完毕。

参数功能
DirObject指向一个存在(实例化)的目录对象结构体(该结构体由打开目录函数创建)
FileInfo指向一个空的文件信息对象结构体,由该函数创建

返回值FR_OK(0)表示函数执行成功。
FILINFO结构体类型:

typedef struct {
	FSIZE_t	fsize;			/* 文件大小(单位字节) */
	WORD	fdate;			/* 修改日期 */
	WORD	ftime;			/* 修改时间 */
	BYTE	fattrib;		/* 文件属性 */
#if _USE_LFN != 0
	TCHAR	altname[13];			/* Altenative file name */
	TCHAR	fname[_MAX_LFN + 1];	/* Primary file name */
#else
	TCHAR	fname[13];		/* 文件名(字节个数最大13个) */
#endif
} FILINFO;

3.FRESULT f_closedir (DIR *dp);

参数功能
dp指向已存在的目录对象结构体的指针,销毁目录对象

4.FRESULT f_ open(FIL* FileObject, const TCHAR* FileName, BYTE ModeFlags);

参数功能
FileObject指向一个空的文件对象结构体的指针,由该函数创建
FileName由用户传进去的已存在的文件名
ModeFlags文件打开模式,有以下几种模式可供选择: FA_READ,FA_WRITE,FA_CREATE_ALWAYS,FA_OPEN_ALWAYS ,FA_CREATE_NEW几种模式可以通过’或’同时存在

FIL结构体类型:

typedef struct {
	_FDID	obj;		/* Object identifier */
	BYTE	flag;			/* File status flags */
	BYTE	err;			/* Abort flag (error code) */
	FSIZE_t	fptr;			/* File read/write pointer (文件打开的时候是0) */
	DWORD	clust;		/* Current cluster of fpter (not valid when fprt is 0) */
	DWORD	sect;			/* Sector number appearing in buf[] (0:invalid) */
#if !_FS_READONLY
	DWORD	dir_sect;		/* Sector number containing the directory entry */
	BYTE*	dir_ptr;		/* Pointer to the directory entry in the win[] */
#endif
#if _USE_FASTSEEK
	DWORD*	cltbl;			/* Pointer to the cluster link map table (Nulled on file open) */
#endif
#if !_FS_TINY
	BYTE	buf[_MAX_SS];	/* File private data read/write window */
#endif
} FIL;

5.FRESULT f_read (FIL* fp,void* buff,UINT btr,UINT* br);

参数功能
fp指向一个已存在的文件对象
buff指向数据缓存区
btr期望读取的字节数
br指向UINT的指针,UINT变量存放实际读取的字节数

返回值FR_OK(0)表示函数执行成功。正常情况下,使用f_open函数打开一个文件后,能通过FIL结构体里面的obj得到文件的字节大小,这样结合Ram的大小,在知道文件大小的情况下一次性或者分几次读完文件内容。f_read函数可以连续调用几次,当(*br)等于0表示文件已经读完了。使用之前注意f_open使用FA_READ模式。
6.FRESULT f_write (FIL* fp,const void* buff,UINT btw,UINT* bw);

参数功能
fp指向一个已存在的文件对象
buff指向数据源数组
btw期望写入的字节数
bw指向UINT的指针,UINT变量存放实际写入的字节数

返回值FR_OK(0)表示函数执行成功。在文件的结尾写入bw个字节。
7.FRESULT f_lseek (FIL* fp,FSIZE_t ofs);

参数功能
fp指向一个已存在的文件对象
ofs偏移量(单位:字节)

返回值FR_OK(0)表示函数执行成功。应用场景可以是这样,打开一个文件,然后调用该函数将光标偏移n个字节,接着就可以调用文件写函数或者文件读函数读写数据了,这就意味着写文件不一定需要在文件结尾写,只要通过f_lseek函数调整偏移位置就可以在文件某个位置写数据了。读文件可以跳过文件信息头直接读文件内容。
8.FRESULT f_sync (FIL* fp);

参数功能
fp指向一个已存在的文件对象

返回值FR_OK(0)表示函数执行成功。f_sync 函数执行和 f_close 函数相同的处理,不同在于执行后文件仍保持打开,文件对象依然有效,可以继续对文件进行读/写/移动操作; 当文件处于长时间的写模式,如数据记录时,周期性调用此函数,或写入数据后立即调用此函数,可以减少因断电等意外情况带来的损失。
9.FRESULT f_close (FIL* fp);

参数功能
Fp指向一个已存在的文件对象

返回值FR_OK(0)表示函数执行成功。关闭一个文件。当执行打开文件函数之后不用文件了应该调用f_close关闭文件。
10.FRESULT f_unlink (const TCHAR* path);

参数功能
path指向一个文件或者路径

返回值FR_OK(0)表示函数执行成功。删除一个文件。
11.FRESULT f_mkdir (const TCHAR* path);

参数功能
path路径下要创建的文件夹

返回值FR_OK(0)表示函数执行成功。在某个路径下创建一个文件夹,比如:path为”0:/one”的时候表示在根目录下创建一个名为one的空文件夹。如果想在空文件夹里边新建文件,可以使用f_open函数,模式选择FA_CREATE_NEW。

标签:fp,文件,函数,指向,FIL,笔记,FATFS,FRESULT
来源: https://blog.csdn.net/qq_40993639/article/details/120340076

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有