fatfs API使用手册

news2024/9/30 18:54:52

配置

/*---------------------------------------------------------------------------/
/  Configurations of FatFs Module
/---------------------------------------------------------------------------*/

#define FFCONF_DEF	80286	/* Revision ID */

/*---------------------------------------------------------------------------/
/ Function Configurations
/---------------------------------------------------------------------------*/

#define FF_FS_READONLY	0
/* 此选项可切换只读配置。(0:读/写或1:只读)只读配置删除写入API函数、f_write()、f_sync()、,
f_unlink()、f_mkdir()、f-chmod()、f.rename()、fctruncate()、fgetfree()以及可选的写入功能。 */


#define FF_FS_MINIMIZE	0
/* 该选项定义了最小化级别以删除一些基本API函数,
0	所有基本API函数都可用。
1	删除F_stat、f_getfree、f_unlink、f_mkdir、f_chmod、f_utime、f_truncate和f_rename函数
2	除1外,F_opendir, f_readdir和f_closedir函数被删除。
3	除2外,F_lseek函数被删除。 */


#define FF_USE_FIND		0
/* 禁用(0)或启用(1) 过滤目录读取函数,f_findfirst和f_findnext。此外,ff_fs_minimal需要为0或1 */


#define FF_USE_MKFS		0
/* 禁用 (0)或启用 (1) f_mkfs函数*/


#define FF_USE_FASTSEEK	0
/* Disable(0)或Enable (1) fast seek function用于**开启f_lseek, f_read和f_write函数的加速模式***/


#define FF_USE_EXPAND	0
/* 禁用 (0)或启用 (1)  f_expand函数 */


#define FF_USE_CHMOD	0
/* 禁用(0)或启用(1)元数据控制功能f_chmod和f_utime。另外,FF_FS_READONLY需要为0 */


#define FF_USE_LABEL	0
/* 禁用 (0) 或启用 (1) 卷标、f_getlabel 和 f_setlabel 的 API 函数 */


#define FF_USE_FORWARD	0
/* 禁用 (0) 或启用 (1) f_forward 功能 */


#define FF_USE_STRFUNC	0		//项切换字符串函数f_gets、f_putc、f_puts 和 f_printf
#define FF_PRINT_LLI	1		//此选项切换对 f_printf 中 **long long integer 参数的**支持
#define FF_PRINT_FLOAT	1		//此选项切换对 f_printf 中**浮点参数的支持**。 启用此功能时,C 标准需要为 C99 或更高版本,并且 math.h 包含在 ff.c 中。
#define FF_STRF_ENCODE	3
/* FF_USE_STRFUNC switches string functions, f_gets(), f_putc(), f_puts() and
/  f_printf().

0	禁用字符串函数
1	启用无需 LF-CRLF 转换的字符串函数
2	使用 LF-CRLF 转换启用字符串函数

FF_STRF_ENCODE
值	文件上的字符编码
0	当前代码页中 A使用 ANSI/OEM
1	UTF-16LE 中的 Unicode
2	UTF-16BE 中的 Unicode
3	UTF-8 中的 Unicode

FF_PRINT_FLOAT
值	描述
0	禁用浮点参数
1	在类型“f”、“e”和“E”中启用浮点参数
2	使用小数分隔符“,”而不是“.”
*/

/*---------------------------------------------------------------------------/
/ Locale and Namespace Configurations
本地和命名空间的配置
/---------------------------------------------------------------------------*/

#define FF_CODE_PAGE	437
/*指定目标系统上使用的 OEM 代码页

值	代码页
0	包括以下所有代码页并由 f_setcp() 设置
437	美国
720	阿拉伯
737	希腊
771	KBL
775	波罗的海
850	拉丁语 1
852	拉丁语 2
855	西里尔
857	土耳其
860	葡萄牙
861	冰岛
862	希伯来
863	加拿大法语
864	阿拉伯
865	北欧
868	俄罗斯
869	希腊语 2
932	日语 (DBCS)
936	简体中文 (DBCS)
949	韩语 (DBCS)
950	繁体中文 (DBCS)
*/


#define FF_USE_LFN		0 //长文件名 (LFN) 的支持
#define FF_MAX_LFN		255
/* The FF_USE_LFN switches the support for LFN (long file name).

0	禁用 LFN。 只能使用 8.3 格式的路径名
1	在 BSS 上使用静态工作缓冲区启用 LFN。 始终不是线程安全的
2	在 STACK 上使用动态工作缓冲区启用 LFN
3	在 HEAP 上使用动态工作缓冲区启用 LFN
/
启用 LFN 时,需要将 Unicode 支持模块 ffunicode.c 添加到项目中。 当使用堆栈作为工作缓冲区时,请注意堆栈溢出。 当工作缓冲区使用堆内存时,需要在项目中添加内存管理函数(ff_memalloc和ff_memfree)

*/


#define FF_LFN_UNICODE	0
/* 当长文件名使能时指定一种编码.
值	字符编码	TCHAR
0	当前 CP 中的 ANSI/OEM	char
1	UTF-16 中的 Unicode	WCHAR
2	UTF-8 中的 Unicode	char
3	UTF-32 中的 Unicode	DWORD
/
/  Also behavior of string I/O functions will be affected by this option.
/  When LFN is not enabled, this option has no effect. */


#define FF_LFN_BUF		255
#define FF_SFN_BUF		12
/* This set of options defines size of file name members in the FILINFO structure
/  which is used to read out directory items. These values should be suffcient for
/  the file names to read. The maximum possible length of the read file name depends
/  on character encoding. When LFN is not enabled, these options have no effect. */


#define FF_FS_RPATH		0
/* 配置相对路径功能.
0	禁用相对路径并删除相关功能。
1	启用相对路径。 f_chdir 和 f_chdrive 函数可用。
2	f_getcwd 函数除 1 外还可用
容器卷/驱动配置
*/


/*---------------------------------------------------------------------------/
/ Drive/Volume Configurations
/---------------------------------------------------------------------------*/

#define FF_VOLUMES		1
/*此选项**配置要使用的卷数**(最多 10 个逻辑驱动器) */


#define FF_STR_VOLUME_ID	0
/*
此选项切换对字符串卷 ID 的支持。 当为驱动器前缀启用卷 ID 的任意字符串时,FF_VOLUME_STRS 预定义的字符串或用户定义的字符串也可以用作路径名中的驱动器前缀。 
无论此选项如何,数字驱动器编号始终有效,并且可以通过此选项启用驱动器前缀的任一格式

 const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb",...
值	描述	示例
0	只能使用数字 ID 中的 DOS/Windows 风格驱动器前缀。		1:/filename
1	也可以使用字符串 ID 中的 DOS/Windows 风格驱动器前缀。	flash:/filename
2	也可以使用字符串 ID 中的 Unix 风格驱动器前缀			/flash/filename
*/
#define FF_VOLUME_STRS		"RAM","NAND","CF","SD","SD2","USB","USB2","USB3"
/* 此选项定义每个逻辑驱动器的卷 ID 字符串.项目数不得少于 FF_VOLUMES。 卷 ID 字符串的有效字符是 A-Z、a-z 和 0-9,但是,它们在比较时不区分大小写。 如果 FF_STR_VOLUME_ID == 0,则此选项无效
如FF_STR_VOLUME_ID >= 1 且未定义此选项,则需要定义用户定义的卷字符串表,如下所示。 该表不应即时修改。

/* 用户定义的卷 ID 字符串 0: 到 3: 
const char* VolumeStr[FF_VOLUMES] = {"ram","flash","sd","usb"};. 
*/



#define FF_MULTI_PARTITION	0
/*
禁用 (0) 或启用 (1)。 该选项切换**多分区功能**。 默认情况下 (0),每个逻辑驱动器号都绑定到相同的物理驱动器号,并且只装载物理驱动器中的一个卷。 启用后,每个逻辑驱动器都绑定到用户定义的分区解析表 VolToPart[] 中列出的物理驱动器上的分区。
*/

#define FF_MIN_SS		512
#define FF_MAX_SS		512
/* 这组选项定义了用于低级磁盘 I/O 接口、**disk_read 和 disk_write 函数的扇区大小范围**,有效值为 512、1024、2048 和 4096。
FF_MIN_SS 定义最小扇区大小,FF_MAX_SS 定义最大扇区大小。 始终为存储卡和硬盘设置 512。 但板载闪存和某些类型的光学介质可能需要更大的值。 
当 FF_MAX_SS > FF_MIN_SS 时,启用可变扇区大小的支持,需要对 disk_ioctl 函数执行 GET_SECTOR_SIZE 命令 */


#define FF_LBA64		0
/*此选项将媒体访问接口切换到 64 位 LBA,并启用用于分区管理的 GUID 分区表 (GPT),启用 (1) 或禁用 (0)。 需要启用 exFAT 文件系统才能启用此功能*/


#define FF_MIN_GPT		0x10000000
/*此选项指定在 f_mkfs 和 f_fdisk 函数中在驱动器上创建分区时**确定分区格式的阈值**。 当可用扇区数等于或大于此值时,驱动器将按 GPT 分区。 当 FF_LBA64 == 0 时,此选项无效 */


#define FF_USE_TRIM		0
/* 禁用 (0) 或启用 (1)。 此选项切换 ATA-TRIM 功能。 要启用 Trim 功能,还应该对 disk_ioctl 功能执行 CTRL_TRIM 命令. */



/*---------------------------------------------------------------------------/
/ System Configurations
/---------------------------------------------------------------------------*/

#define FF_FS_TINY		0
/*正常 (0) 或微型 (1)。 微型配置减少了 FIL 结构、文件对象、FF_MAX_SS 字节的大小。 FATFS 结构中的公共扇区缓冲区、文件系统对象用于文件数据传输,而不是从文件对象中消除私有扇区缓冲区。 */


#define FF_FS_EXFAT		0
/* 
除了 FAT/FAT32 文件系统之外,此选项还会切换对 exFAT 文件系统的支持,启用 (1) 或禁用 (0)。 
要启用 exFAT,还必须启用 LFN,建议配置 FF_LFN_UNICODE >= 1 和 FF_MAX_LFN == 255 以获得全功能的 exFAT 功能。 
*/


#define FF_FS_NORTC		0	
/*
使用 RTC (0) 或不使用 RTC (1) 。将 FF_FS_NORTC 设置为 1 以禁用时间戳功能。 
FatFs 修改的每个对象都将有一个由 FF_NORTC_MON、FF_NORTC_MDAY 和 FF_NORTC_YEAR 定义的常量时间戳。
要使用时间戳功能,请设置 FF_FS_NORTC == 0 并将 get_fattime 函数添加到项目以从 RTC 获取当前时间。 此选项对只读配置没有影响
*/

#define FF_NORTC_MON	1
#define FF_NORTC_MDAY	1
#define FF_NORTC_YEAR	2022
/* 这组选项定义了在无 RTC 系统中使用的时间。 此选项对只读配置或 FF_FS_NORTC == 0 没有影响 */


#define FF_FS_NOFSINFO	0
/* 
0 到 3。如果您需要知道 FAT32 卷上的正确可用空间,请设置此选项的位 0,并且在卷安装后的第一次 f_getfree 函数将强制进行完整的 FAT 扫描。 位 1 控制使用最后分配的簇号进行新分配。

值	描述
bit0=0	如果可用,请使用 FSINFO 中的空闲簇计数。
bit0=1	不要相信 FSINFO 中的空闲簇计数。
bit1=0	使用 FSINFO 中最后分配的簇号来查找空闲簇(如果可用)
bit1=0	不要相信 FSINFO 中最后分配的簇号。
*/


#define FF_FS_LOCK		0
/* 该选项切换文件锁定功能以控制重复文件打开和对打开对象的非法操作。 请注意,此功能与重新进入无关。 此选项在只读配置中必须为 0。

值	描述
0	禁用文件锁定功能。 为避免错误的文件操作导致文件崩溃,应用程序需要避免非法打开、删除和重命名打开的对象
1	启用文件锁定功能。 该值定义了在文件锁定功能下可以同时打开多少个文件/子目录。 对打开对象的非法操作将被 FR_LOCKED 拒绝
*/
#define FF_FS_REENTRANT	0

/*
禁用 (0) 或启用 (1)。 此选项切换 FatFs 模块本身的重入(线程安全)。 
请注意,对不同卷的文件/目录访问始终是可重入的,并且无论此选项如何,它都可以同时工作,但是,卷管理功能 f_mount、f_mkfs 和 f_fdisk 始终不可重入。 
此功能仅控制对同一卷的文件/目录访问,换句话说,对每个文件系统对象的独占使用。 
要启用此功能,还需要将用户提供的同步处理程序 ff_mutex_take、ff_mutex_give、ff_mutex_create 和 ff_mutex_delete 添加到项目中。 
ffsystem.c 中提供了示例代码。
*/
#define FF_FS_TIMEOUT	1000
/*
当等待时间超过此时间段时,使用 FR_TIMEOUT 中止文件功能的 O/S 时间滴答数。 当 FF_FS_REENTRANT == 0 时,此选项无效。
*/

/*--- End of configuration options ---*/

FS的返回码

大多数API函数以枚举类型FRESULT返回常见的结果代码。当API函数成功时,它返回零(FR_OK),否则返回非零值表示错误类型。

FR_OK(成功),
FR_DISK_ERR(下层disk_read、disk_write或disk_ioctl函数报告发生了不可恢复的硬盘错误。),
FR_INT_ERR(断言失败,在内部流程中检测到异常),
FR_NOT_READY(下层disk_initialize函数报告存储设备无法做好工作准备。),
FR_NO_FILE(目录中没找到文件),
FR_NO_PATH(在路径名中找不到目录。),
FR_INVALID_NAME(给定的字符串作为路径名无效。),
FR_DENIED(由于某些原因,所需的访问被拒绝),
FR_EXIST(目录中已存在具有相同名称的对象。),
FR_INVALID_OBJECT(文件/目录对象无效或给定了空指针。),
FR_WRITE_PROTECTED(针对写保护介质的写模式操作。),
FR_INVALID_DRIVE(在路径名称中指定了无效的驱动器号,或者将空指针作为路径名称),
FR_NOT_ENABLED(f_mount函数尚未注册逻辑驱动器的工作区域。没挂载),
FR_NO_FILESYSTEM,(在驱动器中找不到有效的FAT卷。)
FR_MKFS_ABORTED(f_mkfs函数在格式化启动前中止),
FR_TIMEOUT(由于线程安全控制超时,该函数被取消。(),
FR_LOCKED(对对象的操作被文件共享控制拒绝),
FR_NOT_ENOUGH_CORE(内存不足,无法进行操作。)
FR_TOO_MANY_OPEN_FILES(打开的对象数已达到最大值,无法再打开任何对象。)
FR_INVALID_PARAMETER(给定的参数无效,或者卷存在不一致的参数。)

API

1.f_mount注册/注销一个工作区

在FatFs模块上注册/注销一个工作区(文件系统对象)

FRESULT f_mount ( BYTE Drive, FATFS* FileSystemObject );

参数说明
Drive注册/注销工作区的逻辑驱动器号(0-9)
FileSystemObject工作区(文件系统对象)指针
返回值FR_OK (0):函数成功。 FR_INVALID_DRIVE:驱动器号无效
  • f_mount函数在FatFs模块上注册/注销一个工作区。在使用任何其他文件函数之前,必须使用该函数为每个卷注册一个工作区
  • 注销一个工作区,只要指定FileSystemObject为NULL即可,然后该工作区可以被丢弃。该函数只初始化给定的工作区,以及将该工作区的地址注册到内部表中,不访问磁盘I/O层

2.f_open创建/打开文件对象

如果函数成功,则创建一个文件对象。该文件对象被后续的读/写函数用来访问文件。如果想要关闭一个打开的文件对象,则使用f_close函数。如果不关闭修改后的文件,那么文件可能会崩溃。在使用任何文件函数之前,必须使用f_mount函数为驱动器注册一个工作区。只有这样,其他文件函数才能正常工作

FRESULT f_open ( FIL* FileObject, const XCHAR* FileName,BYTE ModeFlags );

参数说明
FileObject将被创建的文件对象结构的指针
FileNameNULL结尾的字符串指针,该字符串指定了将被创建或打开的文件名
ModeFlags指定文件的访问类型和打开方法。它是由下列标志的一个组合指定的
返回值FR_OK (0):函数成功,该文件对象有效。
FR_NO_FILE:找不到该文件。
FR_NO_PATH:找不到该路径。
FR_INVALID_NAME:文件名无效。
FR_INVALID_DRIVE:驱动器号无效。
FR_EXIST:该文件已存在。
FR_DENIED:由于下列原因,所需的访问被拒绝:

(1)以写模式打开一个只读文件。
(2)由于存在一个同名的只读文件或目录,而导致文件无法被创建。
(3)由于目录表或磁盘已满,而导致文件无法被创建。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_WRITE_PROTECTED:在存储介质被写保护的情况下,以写模式打开或创建文件对象。
FR_DISK_ERR:由于底层磁盘I/O接口函数中的一个错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_ENABLED:逻辑驱动器没有工作区。
FR_NO_FILESYSTEM:磁盘上没有有效地FAT卷
参数说明
#define FA_READ 0x01读文件
#define FA_WRITE 0x02写文件
#define FA_OPEN_EXISTING 0x00打开一个已经存在的文件,没有打开失败
#define FA_CREATE_NEW 0x04如果有文件则打开,否则创建一个文件
#define FA_CREATE_ALWAYS 0x08创建一个文件,如果有则创建失败
#define FA_OPEN_ALWAYS 0x10创建一个新文件,如果文件存在则将会被截断并覆盖
#define FA_OPEN_APPEND 0x30追加的方式打开文件

3.f_close关闭一个打开的文件

描述:f_close函数关闭一个打开的文件对象。无论向文件写入任何数据,文件的缓存信息都将被写回到磁盘。该函数成功后,文件对象不再有效,并且可以被丢弃。如果文件对象是在只读模式下打开的,不需要使用该函数,也能被丢弃

FRESULT f_close ( FIL* FileObject );

参数说明
FileObject指向将被关闭的已打开的文件对象结构的指针
返回值FR_OK (0) 文件对象已被成功关闭。
FR_DISK_ERR 由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT:文件对象无效

4.f_read从一个文件读取数据

描述:文件对象中的读/写指针增加已读取字节数。该函数成功后,应该检查 *ByteRead 来检测文件是否结束。在读操作过程中,一旦 *ByteRead < ByteToRead ,则读/写指针到达了文件结束位置。

FRESULT f_read ( FIL* FileObject, void* Buffer, UINT ByteToRead, UINT* ByteRead );

参数说明
FileObject指向将被读取的已打开的文件对象结构的指针。
Buffer指向存储读取数据的缓冲区的指针。首先要定义一个至少512的内存
ByteToRead要读取的字节数,UINT范围内。
ByteRead指向返回已读取字节数的UINT变量的指针。在调用该函数后,无论结果如何,数值都是有效的。
返回值FR_OK (0):函数成功。
FR_DENIED:由于文件是以非读模式打开的,而导致该函数被拒绝。
FR_DISK_ERR:由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT: 文件对象无效。

5.f_write写入数据到一个文件

描述:文件对象中的读/写指针以已写入字节数增加。该函数成功后,应该检查 *ByteWritten 来检测磁盘是否已满。在写操作过程中,一旦 *ByteWritten < *ByteToWritten ,则意味着该卷已满

f_write ( FIL* FileObject, const void* Buffer, UINT ByteToWrite,UINT* ByteWritten );

参数说明
FileObject指向将被读取的已打开的文件对象结构的指针。
Buffer指向存储待写入数据的缓冲区的指针
ByteToWrite要写入的字节数,UINT范围内。
ByteWritten指向返回已写入字节数的UINT变量的指针。在调用该函数后,无论结果如何,数值都是有效的。
返回值FR_OK (0):函数成功。
FR_DENIED:由于文件是以非写模式打开的,而导致该函数被拒绝。
FR_DISK_ERR:由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT 文件对象无效。

6.f_lseek移动指针。

也可以被用来扩展文件大小(簇预分配)。

描述:f_lseek函数当FS_MINIMIZE <= 2时可用。offset只能被指定为相对于文件起始处的字节数。当在写模式下指定了一个超过文件大小的offset时,文件的大小将被扩展,并且该扩展的区域中的数据是未定义的。这适用于为快速写操作迅速地创建一个大的文件。f_lseek函数成功后,为了确保读/写指针已被正确地移动,必须检查文件对象中的成员fptr。如果fptr不是所期望的值,则发生了下列情况之一。

(1)文件结束。指定的offset被钳在文件大小,因为文件已被以只读模式打开。

(2)磁盘满。卷上没有足够的空闲空间去扩展文件大小。

用法:其实这个函数可以解决文件从头开始读的问题,如果你想打开一个文件,读取里面的内容,但又不想从头开始读,那么你可以使用这个函数来解决

FRESULT f_lseek ( FIL* FileObject, DWORD Offset );

参数说明
FileObject指向将被关闭的已打开的文件对象结构的指针
Offset相对于文件起始处的字节数
返回值FR_OK (0):函数成功。
FR_DISK_ERR:由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT:文件对象无效。

7.f_truncate截断文件大小

描述:f_truncate函数当_FS_READONLY == 0 并且 _FS_MINIMIZE == 0时可用。f_truncate函数截断文件到当前的文件读/写指针。当文件读/写指针已经指向文件结束时,该函数不起作用

FRESULT f_truncate ( FIL* FileObject );

参数说明
FileObject待截断的打开的文件对象的指针
返回值FR_OK (0):函数成功。
FR_DISK_ERR:由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT 文件对象无效

8.f_sync冲洗一个写文件的缓存信息

描述:f_sync函数当_FS_READONLY == 0时可用。f_sync函数和f_close函数执行同样的过程,但是文件仍处于打开状态,并且可以继续对文件执行读/写/移动指针操作。这适用于以写模式长时间打开文件,比如数据记录器。定期的或f_write后立即执行f_sync可以将由于突然断电或移去磁盘而导致数据丢失的风险最小化。在f_close前立即执行f_sync没有作用,因为在f_close中执行了f_sync。换句话说,这两个函数的差异就是文件对象是不是无效的

FRESULT f_sync ( FIL* FileObject );

参数说明
FileObject待冲洗的打开的文件对象的指针
返回值FR_OK (0):函数成功。
FR_DISK_ERR:由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_INVALID_OBJECT 文件对象无效

9.f_opendir打开一个目录

f_opendir函数当_FS_MINIMIZE <= 1时可用。f_opendir函数打开一个已存在的目录,并为后续的调用创建一个目录对象。该目录对象结构可以在任何时候不经任何步骤而被丢弃

FRESULT f_opendir ( DIR* DirObject, const XCHAR* DirName );

参数说明
DirObject待创建的空白目录对象的指针
DirName'\0’结尾的字符串指针,该字符串指定了将被打开的目录名。
返回值FR_OK (0):函数成功,目录对象被创建。该目录对象被后续调用,用来读取目录项。
FR_NO_PATH:找不到路径。
FR_INVALID_NAME:路径名无效。
FR_INVALID_DRIVE:驱动器号无效。
FR_NOT_READY:由于驱动器中没有存储介质或任何其他原因,而导致磁盘驱动器无法工作。
FR_DISK_ERR:由于底层磁盘I/O函数中的错误,而导致该函数失败。
FR_INT_ERR:由于一个错误的FAT结构或一个内部错误,而导致该函数失败。
FR_NOT_ENABLED:逻辑驱动器没有工作区。
FR_NO_FILESYSTEM:磁盘上没有有效的FAT卷。

10.f_unlink - 删除文件或子目录

FRESULT f_unlink ( const TCHAR* path /* [IN] Object name */ );

path:指向以 null 结尾的字符串的指针,该字符串指定要删除的文件或子目录

11.f_utime - 更改文件或子目录的时间戳

FRESULT f_utime (
const TCHAR* path, /* [IN] Object name /
const FILINFO
fno /* [IN] Time and data to be set */ );

path:指向指定要更改的对象的空终止字符串的指针(文件夹及文件的名字)。
fno:指向具有要在成员 fdate 和 ftime 中设置的时间戳的文件信息结构的指针

12.f_gets - 从文件中读取一个字符串

描述
读取操作将继续,直到存储“\n”、到达文件末尾或缓冲区充满 len - 1 个字符。 读取的字符串以“\0”结尾。 当没有字符可读取或读取操作发生任何错误时,它返回一个空指针。 可以使用 f_eof 和 f_error 函数检查 EOF 和错误的状态。

TCHAR* f_gets (
  TCHAR* buff, /* [OUT] 指向读取缓冲区的指针,用于存储读取的字符串。 */
  int len,     /* [IN] 以项目为单位的读取缓冲区的大小。 */
  FIL* fp      /* [IN] 指向打开文件对象结构的指针。 */
);

 /* 读取每一行并显示出来 */
    while (f_gets(line, sizeof line, &fil)) {
        printf(line);
    }

13.f_putc - 将一个字符放入文件

int f_putc (
  TCHAR chr,  /* [IN] 要写的字符 */
  FIL* fp     /* [IN] 指向打开文件对象结构的指针 */
);

14.f_puts - 将字符串写入文件

int f_puts (
  const TCHAR* str, /* [IN] 指向要写入的空终止字符串的指针。 不会写入终止符 */
  FIL* fp           /* [IN] 指向打开文件对象结构的指针 */
);

15.f_printf - 将格式化字符串写入文件

int f_printf (
  FIL* fp,          /* [IN] 指向打开文件对象结构的指针 */
  const TCHAR* fmt, /* [IN] 指向空的 '\0' 终止格式字符串的指针。 不会输出终止符。*/
  ...               /*Optional arguments...*/
);
f_printf(fp, "%d", 1234);             /* "1234" */

描述
格式控制指令是标准库的一个子集,如下所示:

%[flag][width][precision][size]type

flag

填充选项。 A - 指定左对齐。 0 指定零填充。 默认设置是右对齐和空格填充。

width

字段的最小宽度,1-99 或 *。 如果生成的字符串的宽度小于最小宽度,则剩余字段用空格或零填充。 * 指定值来自 int 类型的参数。 默认设置为零。

precision

指定小数位数或字符串的最大宽度,.0-.99 或 .*。 如果省略数字,则与 .0 相同。 默认设置为数字 6,字符串无限制。

size

指定整数参数 l(long) 和 ll(long long) 的大小。 如果 sizeof (long) == sizeof (int) 为真(这是典型的 32 位系统),则可以省略长整型参数的前缀 l。 整数参数的默认大小为 int,浮点参数始终假定为 double 作为默认参数提升。

type
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

f_printf的返回: 当字符串写入成功时,它返回写入文件的字符编码单元数。 当函数因磁盘已满或错误而失败时,将返回一个负值。

16.f_tell - 获取文件的当前读/写指针

此功能作为宏实现

#define f_tell(fp) ((fp)->fptr)

17.f_eof - 测试文件的文件结尾

此功能作为宏实现

#define f_eof(fp) ((int)((fp)->fptr == (fp)->fsize))

18.f_size - 获取文件的大小

作为宏实现

#define f_size(fp) ((fp)->obj.objsize)

19.f_getfree获取空闲簇的数目

FRESULT f_getfree ( 
  const XCHAR* Path,       /*  驱动器的根目录  */ 
  DWORD* Clusters,         /*  存储空闲簇数目变量的指针  */ 
  FATFS** FileSystemObject /*  文件系统对象指针的指针  */ 
); 

参数

Path ;‘\0’ 结尾的字符串指针,该字符串指定了逻辑驱动器的目录。

Clusters ;存储空闲簇数目的 DWORD 变量的指针。

FileSystemObject ;相应文件系统对象指针的指针。


其他API

名称 简介
f_open 打开/创建文件
f_close 关闭已打开的文件
f_read 从文件中读取数据
f_write 将数据写入文件
f_lseek 移动读/写指针,扩展大小
f_truncate 截断文件大小
f_sync 刷新缓存数据
f_forward 为数据转发到流
f_expand 为文件分配连续的块
f_gets 读取字符串
f_putc 写一个字符
f_puts 编写字符串
f_printf 编写格式化字符串
f_tell 获取当前读/写指针
f_eof 文件结尾测试
f_size 获取大小
f_error 测试错误
2️⃣ 目录访问
名称 简介
f_opendir 打开目录
f_closedir 关闭打开的目录
f_readdir 读取目录项
f_findfirst 打开目录并读取匹配的第一个项目
f_findnext 读取下一个匹配的项目
3️⃣ 文件和目录管理
名称 简介
f_stat 检查文件或子目录是否存在
f_unlink 删除文件或子目录
f_rename 重命名/移动文件或子目录
f_chmod 更改文件或子目录的属性
f_utime 更改文件或子目录的时间戳
f_mkdir 创建子目录
f_chdir 更改当前目录
f_chdrive 更改当前驱动器
f_getcwd 检索当前目录和驱动器

4️⃣ 卷管理和系统配置
名称 简介
f_mount 注册/注销卷的工作区域
f_mkfs 在逻辑驱动器上创建 FAT 卷
f_fdisk 在物理驱动器上创建分区
f_getfree 获取卷上的可用空间
f_getlabel 获取卷标
f_setlabel 设置卷标
f_setcp 设置活动代码页


原文链接:https://blog.csdn.net/qq_41650023/article/details/125201954

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180418.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JWT(JSON Web Token)的介绍

JSON Web Token&#xff08;缩写 JWT&#xff09;是目前最流行的跨域认证解决方案&#xff0c;本文介绍它的原理和用法。 一、跨域认证的问题 互联网服务离不开用户认证。一般流程是下面这样。 1、用户向服务器发送用户名和密码。 2、服务器验证通过后&#xff0c;在当前对话&…

如何组织鼠标的默认的事件

如何组织鼠标的默认的事件 我原先的代码是 dblclick"checkNode(data)"设置了一个双击的事件&#xff0c;我如果双击的话就会导致这个内容被选中。 选中内容的同时会触发浏览器默认的操作&#xff0c;导致出现复制的框这些东西。 解决的方法。加一句。 mousedown.pr…

尝鲜使用 YOLO V11 Fine-Tuning 训练自定义的目标检测模型

一、YOLO V11 2024年9月30日&#xff0c;Ultralytics官方团队宣布YOLOv11正式发布&#xff0c;标志着YOLO系列实时目标检测器的又一次重大升级。这一新版本不仅在准确性和检测速度上再创新高&#xff0c;还通过架构和训练方法的革新&#xff0c;极大地提升了目标检测的综合性能…

算法打卡:第十一章 图论part11

今日收获&#xff1a;Floyd 算法&#xff0c;A * 算法&#xff0c;最短路算法总结 1. Floyd 算法 题目链接&#xff1a;97. 小明逛公园 思路&#xff1a;Floyd用于解决多源最短路问题&#xff0c;对边的正负权值没有要求。核心是动态规划 &#xff08;1&#xff09;dp数组的…

Stable Diffusion的Lora使用和训练 如何使用和训练LoRA模型?你想要的都在这!--人人都可以当炼金术士!

随着人工智能技术的不断发展&#xff0c;图像生成与反推技术已经成为了AI领域的一大热点。今天&#xff0c;我们就来为大家详细介绍Stable Diffusion的Lora使用和训练方法&#xff0c;让每个人都能成为炼金术士&#xff0c;创造出属于自己的图像生成魔法&#xff01; 在我们使…

108.WEB渗透测试-信息收集-FOFA语法(8)

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 内容参考于&#xff1a; 易锦网校会员专享课 上一个内容&#xff1a;107.WEB渗透测试-信息收集-FOFA语法&#xff08;7&#xff09; 指挥系统的后台&#xff…

把GV幅度还不赶紧地方吧

文章目录 标题1代码 标题1 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Document</titl…

pve虚拟机常见问题汇总

一、问题记录 当你遇到 Proxmox VE (PVE) 报错信息 “TASK ERROR: can’t lock file ‘/var/lock/qemu-server/lock-141.conf’ - got timeout”&#xff0c;通常意味着 PVE 尝试对一个虚拟机进行操作&#xff08;如停止或重启&#xff09;时&#xff0c;无法获取必要的锁文件&…

项目管理系统如何实现项目申报流程自动化?

传统的项目申报流程往往繁琐复杂&#xff0c;涉及众多环节和部门间的协作&#xff0c;不仅耗时费力&#xff0c;还容易因人为疏忽而导致错误或延误。随着信息技术的飞速发展&#xff0c;项目管理系统的出现为项目申报流程的自动化提供了可能&#xff0c;极大地提升了申报效率和…

【Windows】自定义显示器的分辨率

背景 由于本人更新驱动导致2个显示器里面&#xff0c;有一个显示器的分辨率只剩下2个可以调节 这样就导致2个显示器分辨率不同&#xff0c;更新了多次驱动都修复不了&#xff0c;所以想着看能不能自定义分辨率 工具下载 显示器自定义分辨率工具 或者百度搜索 Custom Resolu…

基于大数据的二手房价数据可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…

求组合数专题

求组合数 Ⅰ&#xff08;递推公式&#xff09; 思路 递推法预处理 利用公式 复杂度 直接查询 单次查询复杂度 代码 #include <bits/stdc.h> using namespace std; const int N 2010; const int mod 1e97; int c[N][N]; int get_c(int a, int b) {c[0][0] 1;for(i…

解决VRM格式模型在Unity中运行出现头发乱飞等问题

1、问题 通过VRoidStudio制作导出的vrm格式的模型&#xff0c;放在unity中使用时&#xff0c;一运行就会出现头发乱飞&#xff0c;没有自然下垂的问题 2、解决方法 将模型下的secondary中的所有VRM Spring Bone脚本中的Drag Force改为1&#xff0c;Hit Radius改为0 修改后…

SpringBoot+Thymeleaf发票系统

> 这是一个基于SpringBootSpringSecurityThymeleafBootstrap实现的简单发票管理系统。 > 实现了用户登录&#xff0c;权限控制&#xff0c;客户管理&#xff0c;发票管理等功能。 > 并且支持导出为 CSV / PDF / EXCEL 文件。 > 本项目是一个小型发票管理系统…

LeetCode[中等] 24.两两交换链表中的结点

给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交换&#xff09;。 思路&#xff1a;递归 头结点head&#xff0c;第二个结点head.next, 交换结点…

【论文阅读】MEDICAL GRAPH RAG: TOWARDS SAFE MEDICAL LARGE LANGUAGE MODEL VIA

论文地址&#xff1a;https://arxiv.org/abs/2408.04187#:~:textWe%20introduce%20a%20novel%20graph-based%20Retrieval-Augmented 代码地址&#xff1a; GitHub - MedicineToken/Medical-Graph-RAG: Medical Graph RAG: Graph RAG for the Medical Data 1 研究背景&#xff1…

LARA:多语言多轮对话意图分类的新突破

人工智能咨询培训老师叶梓 转载标明出处 多轮对话意图分类面临的主要挑战在于对话的复杂性和上下文的不断变化。如图 1 所示。在多轮对话中&#xff0c;意图可能随着对话的进展而变化&#xff0c;这就需要注释者不仅要理解每条消息的内容&#xff0c;还要把握整个对话的上下文…

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27

计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27 目录 文章目录 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27目录1. VisScience: An Extensive Benchmark for Evaluating K12 Educational Multi-modal Scientific Reasoning VisScience:…

Android开发国家手机号归属地列表

Android开发国家手机号归属地列表 国家手机号归属地列表需求不多&#xff0c;但是还是有一些 一、思路&#xff1a; 本地的国家归属号json 二、效果图&#xff1a; 三、关键代码&#xff1a; // 联系&#xff1a;893151960 public class ChooseCountryActivity extends Ap…

golang 获取证书的生效及过期时间

测试样例 func TestGetCertVaildTime(t *testing.T) {certPEM, err : ioutil.ReadFile("aa.bbb.com.crt")if err ! nil {fmt.Println("读取证书文件出错:", err)return}// 解码PEM格式的证书block, _ : pem.Decode(certPEM)if block nil {fmt.Println(&q…