stm32FATFS文件系统函数接口的使用笔记

转载注明出处!!!
一、目录操作
1.打开目录
(1)DIR picdir;
res=f_opendir(&picdir,“2:/PICTURE”);
参数一:DIR结构体类型变量指针,需要自己创建一个这种类型变量并且取地址
typedef struct {
FATFS* fs; //是个结构体,结构体成员是记录目录信息的变量,具体看代码
WORD id;
。。。。。。
} DIR;
参数二:文件路径,是一个字符串,只不过是我们熟悉的c盘d盘变成了012…
返回值是一个枚举类型:
typedef enum {
FR_OK = 0, /* (0) Succeeded /
FR_DISK_ERR, /
(1) A hard error occurred in the low level disk I/O layer /
FR_INT_ERR,
。。。。。。 //详细的去看代码
} FRESULT;
2.读取目录
(1) DIR tdir; FILINFO tfileinfo;(文件状态结构体)
picfileinfo.lfsize=_MAX_LFN
2+1; //长文件名最大长度
picfileinfo.lfname=mymalloc(SRAMIN,picfileinfo.lfsize); //为长文件名缓存分配内存
res=f_readdir(&tdir,&tfileinfo);
参数一:DIR结构体类型变量地址,需要自己创建一个这种类型变量并且取地址
同打开目录一样。
参数二:FILINFO 结构体类型变量地址,这种结构体保存的是目录下文件的状态
typedef struct {
DWORD fsize; /* File size /
WORD fdate; /
Last modified date /
WORD ftime; /
Last modified time /
BYTE fattrib; /
Attribute /
TCHAR fname[13]; /
Short file name (8.3 format) /
#if _USE_LFN
TCHAR
lfname; /* Pointer to the LFN buffer /
UINT lfsize; /
Size of LFN buffer in TCHAR */
#endif
} FILINFO;
FATFS文件系统支持长文件名,所以在使用文件信息结构体tfileinfo的时候需要给成员变量lfname申请内存用于保存长文件名,申请的内存大小位另个成员变量lfsize的值,_MAX_LFN是一个宏,意思是max longFileName 最大长文件名,值是250。
返回值跟打开目录是一样的。
3.关闭目录
(1)DIR tdir;
f_closedir(&tdir);
参数一:DIR结构体类型变量指针,需要自己创建一个这种类型变量并且取地址
同打开目录一样。
返回值跟打开目录是一样的。
4.创建目录
(1)f_mkdir(“2:/PICTURE”);
参数一:要创建的文件路径
返回值跟打开目录是一样的。
5.删除目录或文件
(1)f_unlinkf(“2:/PICTURE”);
参数一:要删除的文件或者目录路径
返回值跟打开目录是一样的。
还有很多目录相关操作没有列举出来,比如说更改名字,更改权限,在ff.c里面都有。

二、文件操作
1.打开文件
(1) FIL file;(文件信息结构体) u8path; u8 mode
file=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
res=f_open(file,(const TCHAR*)path,mode);
参数一:FIL类型指针变量,指向一块FIL大小的内存,大小好像是552
参数二:文件路径,TCHAR=无符号字符型,
参数三:打开模式,ff.h定义了一些宏
#define FA_READ 0x01 //0001
#define FA_OPEN_EXISTING 0x00
#if !_FS_READONLY
#define FA_WRITE 0x02 //0010
#define FA_CREATE_NEW 0x04 //0100
#define FA_CREATE_ALWAYS 0x08 //1000
#define FA_OPEN_ALWAYS 0x10 //1010
#define FA__WRITTEN 0x20
#define FA__DIRTY 0x40
#endif
返回值:跟打开目录是一样的。
2.读取文件
(1)FIL file; u8 fatbuf;
file=(FIL
)mymalloc(SRAMIN,sizeof(FIL));
fatbuf=(u8
)mymalloc(SRAMIN,512);
res=f_read(file,fatbuf,512,&br);
参数一:同打开文件一样
参数二:指向数据缓冲区的指针,要申请一个512字节的数据缓冲区
参数三:要读取的字节数
参数四:存放读取字节数的变量地址
返回值:跟打开目录是一样的
3.写入文件
(1)FIL file; u8dat
file=(FIL*)mymalloc(SRAMIN,sizeof(FIL));
res=f_write(file,dat,len,&bw);
参数一:同打开文件一样
参数二:要写入的数据指针
参数三:要写入的数据长度
参数四:真实写入的数据长度地址
返回值:跟打开目录是一样的
4.关闭文件
(1)FIL file;
f_close(file);
参数一:同打开文件一样
返回值:跟打开目录是一样的
后面还有很多函数用法也是大同小异
int f_putc (TCHAR c, FIL
fp); /* Put a character to the file /
int f_puts (const TCHAR
str, FIL* cp); /* Put a string to the file /
int f_printf (FIL
fp, const TCHAR* str, …); /* Put a formatted string to the file /
f_chmod (const TCHAR
path, BYTE value, BYTE mask); /Change attribute of the file/dir /
FRESULT f_stat (const TCHAR
path, FILINFO
fno); /* Get file status /
FRESULT f_lseek (FIL
fp, DWORD ofs); /* Move file pointer of a file object */

你可能感兴趣的:(stm32)