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。