fatfs API使用手册
配置
/*---------------------------------------------------------------------------/
/ 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 中的 UnicodeFF_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 | 将被创建的文件对象结构的指针 | |
| FileName | NULL结尾的字符串指针,该字符串指定了将被创建或打开的文件名 | |
| 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
相关文章:
fatfs API使用手册
配置 /*---------------------------------------------------------------------------/ / Configurations of FatFs Module /---------------------------------------------------------------------------*/#define FFCONF_DEF 80286 /* Revision ID *//*---------------…...
9.23作业
仿照string类,自己手动实现 My_string 代码如下 MyString.h #ifndef MYSTRING_H #define MYSTRING_H #include <iostream> #include <cstring>using namespace std;class My_string { private:char *ptr; //指向字符数组的指针int size; …...
Unity3D 房间去重叠化算法详解
前言 在Unity3D游戏开发中,经常需要生成和处理多个房间的场景,特别是在地牢生成、房屋布局或迷宫设计等应用中。为了确保生成的房间不会重叠,我们需要一种有效的去重叠化算法。以下将详细介绍该算法的原理和代码实现。 对惹,这里有…...
mybatis 配置文件完成增删改查(五) :单条件 动态sql查询,相当于switch
文章目录 单条件 动态sql查询写测试方法 疑问总结 单条件 动态sql查询 <select id"selectByConditionBySingle" resultMap"brandResultMap">.select *from tb_brandwhere<choose>/*相当于switch*/<when test"status ! null">…...
全球IP归属地查询-IP地址查询-IP城市查询-IP地址归属地-IP地址解析-IP位置查询-IP地址查询API接口
IP地址城市版查询接口 API是指能够根据IP地址查询其所在城市等地理位置信息的API接口。这类接口在网络安全、数据分析、广告投放等多个领域有广泛应用。以下是一些可用的IP地址城市版查询接口API及其简要介绍 1. 快证 IP归属地查询API 特点:支持IPv4 提供高精版、…...
Vue3+FastAPI中Token的刷新机制(含代码示例)
在Vue3和FastAPI的应用中,token刷新机制通常涉及以下几个步骤: 登录过程:用户登录时,后端FastAPI验证用户信息,验证通过后生成一个访问令牌(access token)和一个刷新令牌(refresh t…...
【GAN 图像生成】
理论知识学习: PART 1: 生成对抗网络GAN 深度学习模型,用于生成数据 对抗式训练,生成器v判别器 DCGAN>WGAN>StyleGAN技术不断进化 GAN在艺术创作。数据增强领域应用越来越广泛 应用: GAN在图像合成&#x…...
【自然语言处理】词嵌入模型
词嵌入(Word Embedding) 是一种将词汇表示为实数向量的技术,通常是低维度的连续向量。这些向量被设计为捕捉词汇之间的语义相似性,使得语义相似的词在嵌入空间中的距离也更近。词嵌入可以看作是将离散的语言符号(如单词…...
了解针对基座大语言模型(类似 ChatGPT 的架构,Decoder-only)的重头预训练和微调训练
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/ 随着自然语言处理(NLP)技术的飞速进步,基于 Transformer 架构的大语言模型在众多任务中取得了显著成就。特别是 Decoder-only 架构,如 GPT 系列模型&…...
cmake如何在编译时区分-std=c++17和-std=gnu++17?检查宏
如何在编译时区分-stdc17和-stdgnu17?检查宏?-腾讯云开发者社区-腾讯云 我正在使用__int128扩展的g。-stdc17的问题是,一些C库不具备对该扩展的全部支持(即std::make_unsigned<>失败)。当使用-stdgnu17时,它工作得很好。 我…...
速通数据结构与算法第七站 排序
系列文章目录 速通数据结构与算法系列 1 速通数据结构与算法第一站 复杂度 http://t.csdnimg.cn/sxEGF 2 速通数据结构与算法第二站 顺序表 http://t.csdnimg.cn/WVyDb 3 速通数据结构与算法第三站 单链表 http://t.csdnimg.cn/cDpcC 4 速通…...
灵当CRM index.php接口SQL注入漏洞复现 [附POC]
文章目录 灵当CRM index.php接口SQL注入漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 0x06 修复建议 灵当CRM index.php接口SQL注入漏洞复现 [附POC] 0x01 前言 免责声明:请勿利用文章内的相关技…...
修复: Flux女生脸不再油光满面, 屁股下巴 -- 超实用Comfyui小技巧
ComfyUI上目前最强画图模型公认为Flux. 初次用Flux基础模型画真实的女生时, 和SD比起来, 会觉得画出来细节更多, 更真实. 但是当画多了, 就会觉得画出来的女生总是似曾相识. 仔细观察, 会发现一些共同的特征. 人偏老气, 像30~50的女生. 改了提示词也效果不大. 颧骨凸起, 嘴…...
Actions Speak Louder than Words Meta史诗级的端到端推荐大模型落地
发现好久之前整理的推荐系统被遗忘在了草稿箱,让它出来见见世面。。。后续空了持续更新 文章目录 1.Background2.Related works2.1 典型推荐模型2.1.1 DIN2.1.2 DIEN2.1.3 SIM2.1.4 MMoE2.1.5 其他 2.2. 生成式推荐 3.Method3.1 统一特征空间3.2 重塑召回排序模型3.…...
金智维KRPA之Excel自动化
Excel自动化操作概述 Excel自动化主要用于帮助各种类型的企业用户实现Excel数据处理自动化,Excel自动化是可以从单元格、列、行或范围中读取数据,向其他电子表格或工作簿写入数据等活动。 通过相关命令,还可以对数据进行排序、进行格式…...
哪款宠物空气净化器能有效去除浮毛?希喂、352实测分享
你是否曾经站在家电卖场里,面对琳琅满目的宠物空气净化器产品而感到无所适从?或者在浏览网上商城时,被海量的参数和功能描述搞得头晕眼花?别担心,你不是一个人。在这个科技飞速发展的时代,选择一台既能满足…...
2024.9.28更换启辰R30汽车火花塞
2024.9.28周六汽车跑了11万公里,实在加速肉,起步顿挫,油耗在8个,决定更换火花塞。第一个火花塞要拆掉进气歧管。第二和第三个可以直接换。打开第二个火花塞一看电极都被打成深坑,针电极都被打凸。我有两个旧的火花塞&a…...
2024上海网站建设公司哪家比较好TOP3
判断一家网建公司的好坏,第一是看公司背景,包括成立时间,工商注册信息等,第二可以去看看建站公司做的案例,例如,网站开发、设计、引流等等的以往案例,了解清楚具体的业务流程。 一、公司背景 …...
TDesign组件库+vue3+ts 如何视觉上合并相同内容的table列?(自定义合并table列)
背景 当table的某一列的某些内容相同时,需要在视觉上合并这一部分的内容为同个单元格 如上图所示,比如需要合并当申请人为同个字段的列。 解决代码 <t-table:data"filteredData":columns"columns":rowspan-and-colspan"…...
BACnet协议-(基于ISO 8802-3 UDP)(2)
1、模拟设备的工具界面如下: 2、使用yet another bacnet explorer 用作服务,用于发现设备,界面如下: 3、通过wireshark 抓包如下: (1)、整体包如下: (2)、m…...
3.3.1_1 检错编码(奇偶校验码)
从这节课开始,我们会探讨数据链路层的差错控制功能,差错控制功能的主要目标是要发现并且解决一个帧内部的位错误,我们需要使用特殊的编码技术去发现帧内部的位错误,当我们发现位错误之后,通常来说有两种解决方案。第一…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)
参考官方文档:https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java(供 Kotlin 使用) 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...
什么是Ansible Jinja2
理解 Ansible Jinja2 模板 Ansible 是一款功能强大的开源自动化工具,可让您无缝地管理和配置系统。Ansible 的一大亮点是它使用 Jinja2 模板,允许您根据变量数据动态生成文件、配置设置和脚本。本文将向您介绍 Ansible 中的 Jinja2 模板,并通…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...
安宝特案例丨Vuzix AR智能眼镜集成专业软件,助力卢森堡医院药房转型,赢得辉瑞创新奖
在Vuzix M400 AR智能眼镜的助力下,卢森堡罗伯特舒曼医院(the Robert Schuman Hospitals, HRS)凭借在无菌制剂生产流程中引入增强现实技术(AR)创新项目,荣获了2024年6月7日由卢森堡医院药剂师协会࿰…...
QT3D学习笔记——圆台、圆锥
类名作用Qt3DWindow3D渲染窗口容器QEntity场景中的实体(对象或容器)QCamera控制观察视角QPointLight点光源QConeMesh圆锥几何网格QTransform控制实体的位置/旋转/缩放QPhongMaterialPhong光照材质(定义颜色、反光等)QFirstPersonC…...
从 GreenPlum 到镜舟数据库:杭银消费金融湖仓一体转型实践
作者:吴岐诗,杭银消费金融大数据应用开发工程师 本文整理自杭银消费金融大数据应用开发工程师在StarRocks Summit Asia 2024的分享 引言:融合数据湖与数仓的创新之路 在数字金融时代,数据已成为金融机构的核心竞争力。杭银消费金…...
基于PHP的连锁酒店管理系统
有需要请加文章底部Q哦 可远程调试 基于PHP的连锁酒店管理系统 一 介绍 连锁酒店管理系统基于原生PHP开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。 技术栈 phpmysqlbootstrapphpstudyvscode 二 功能 用户 1 注册/登录/注销 2 个人中…...
DBLP数据库是什么?
DBLP(Digital Bibliography & Library Project)Computer Science Bibliography是全球著名的计算机科学出版物的开放书目数据库。DBLP所收录的期刊和会议论文质量较高,数据库文献更新速度很快,很好地反映了国际计算机科学学术研…...
