▼我是阿荣,关注我,在技术路上一起精进!▼
文件和目录管理
f_stat - 检查文件或子目录是否存在
函数原型
FRESULT f_stat (
const TCHAR* path, /* [IN] Object name */
FILINFO* fno /* [OUT] FILINFO structure */
);
形参
path
指向以null结尾的字符串的指针,该字符串指定要获取其信息的对象。对象不能是根目录。
fno
指向FILINFO结构体来存储对象的信息。如果不需要此信息,请设置空指针。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE
描述
f_stat函数检查目录中是否存在文件或子目录。如果不存在,则函数返回FR_NO_FILE。如果存在,该函数返回FR_OK,有关对象、大小、时间戳和属性的信息存储到文件信息结构体中。有关文件的详细信息,请参阅FILINFO结构和f_readdir函数。
示例
FRESULT fr;
FILINFO fno;
printf("Test for 'file.txt'...\n");
fr = f_stat("file.txt", &fno);
switch (fr) {
case FR_OK:
printf("Size: %lu\n", fno.fsize);
printf("Timestamp: %u/%02u/%02u, %02u:%02u\n",
(fno.fdate >> 9) + 1980, fno.fdate >> 5 & 15, fno.fdate & 31,
fno.ftime >> 11, fno.ftime >> 5 & 63);
printf("Attributes: %c%c%c%c%c\n",
(fno.fattrib & AM_DIR) ? 'D' : '-',
(fno.fattrib & AM_RDO) ? 'R' : '-',
(fno.fattrib & AM_HID) ? 'H' : '-',
(fno.fattrib & AM_SYS) ? 'S' : '-',
(fno.fattrib & AM_ARC) ? 'A' : '-');
break;
case FR_NO_FILE:
printf("It is not exist.\n");
break;
default:
printf("An error occured. (%d)\n", fr);
}
f_unlink - 删除文件或子目录
函数原型
FRESULT f_unlink (
const TCHAR* path /* [IN] Object name */
);
形参
path
指向以NULL结尾的字符串的指针,该字符串指定要删除的文件或子目录。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_LOCKED, FR_NOT_ENOUGH_CORE
描述
如果要移除的对象遇到以下情况时,则该操作将被拒绝。
- 文件/子目录不能具有只读属性(AM_RDO),否则函数将被拒绝,并返回FR_DENIED。
- 子目录必须为空且不能为当前目录,否则函数将被拒绝,并返回FR_DENIED。
- 不能打开文件/子目录,否则FAT卷可能会折叠。当启用文件锁定功能时,它将被安全地拒绝。
f_rename - 重命名/移动文件或子目录
函数原型
FRESULT f_rename (
const TCHAR* old_name, /* [IN] Old object name */
const TCHAR* new_name /* [IN] New object name */
);
形参
old_name
指向以null结尾的字符串的指针,该字符串指定要重命名的现有文件或子目录。
new_name
指向指定新对象名称的以null结尾的字符串的指针。可以在此字符串中指定驱动器号,但会忽略该驱动器号,并将其假定为旧名称的同一驱动器。除旧名称外,任何具有此路径名称的对象都不得存在,否则函数将执行失败,返回FR_EXIST。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_EXIST, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_LOCKED, FR_NOT_ENOUGH_CORE
描述
重命名文件或子目录,还可以将其移动到同一卷中的其他目录。要重命名的对象不能是打开的对象,否则FAT卷可能会折叠。启用文件锁定功能时,会安全地拒绝此类错误操作。
示例
/* Rename an object in the default drive */
f_rename("oldname.txt", "newname.txt");
/* Rename an object in the drive 2 */
f_rename("2:oldname.txt", "newname.txt");
/* Rename an object and move it to another directory in the drive */
f_rename("log.txt", "old/log0001.txt");
f_chmod - 更改文件或子目录的属性
函数原型
FRESULT f_chmod (
const TCHAR* path, /* [IN] Object name */
BYTE attr, /* [IN] Attribute flags */
BYTE mask /* [IN] Attribute masks */
);
形参
path
指向一个以NULL结尾的字符串,这个字符串标识要被改变的对象。
attr
属性标志,由以下标志的一个或多个组合而成。指定的标志将被设置,并清除其他标志。
属性 | 描述 |
---|---|
AM_RDO | 只读 |
AM_ARC | 档案 |
AM_SYS | 系统 |
AM_HID | 隐藏 |
mask
指定要更改的属性的属性掩码。指定的属性被设置或清除,其他属性保持不变。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE
描述
f_chmod函数更改文件或子目录的属性。
示例
/* Set Read-only, clear Archive and others are left unchanged. */
f_chmod("file.txt", AM_RDO, AM_RDO | AM_ARC);
f_utime - 更改文件或子目录的时间戳
函数原型
FRESULT f_utime (
const TCHAR* path, /* [IN] Object name */
const FILINFO* fno /* [IN] Time and data to be set */
);
形参
path
指向一个以NULL结尾的字符串,这个字符串标识要被改变的对象。
fno
指向具有要在成员fdate和ftime中设置的时间戳的文件信息结构的指针。不关心任何其他成员。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_FILE, FR_NO_PATH, FR_INVALID_NAME, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE
描述
f_utime函数更改文件或子目录的时间戳。
示例
FRESULT set_timestamp (
char *obj, /* Pointer to the file name */
int year,
int month,
int mday,
int hour,
int min,
int sec
)
{
FILINFO fno;
fno.fdate = (WORD)(((year - 1980) * 512U) | month * 32U | mday);
fno.ftime = (WORD)(hour * 2048U | min * 32U | sec / 2U);
return f_utime(obj, &fno);
}
f_mkdir - 创建一个子目录
函数原型
FRESULT f_mkdir (
const TCHAR* path /* [IN] Directory name */
);
形参
path
指向以null结尾的字符串的指针,该字符串指定要创建的目录名。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_DENIED, FR_EXIST, FR_WRITE_PROTECTED, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE
描述
此函数用于创建一个新目录。要删除目录,请使用f_unlink函数。
示例
res = f_mkdir("sub1");
if (res) die(res);
res = f_mkdir("sub1/sub2");
if (res) die(res);
res = f_mkdir("sub1/sub2/sub3");
if (res) die(res);
f_chdir - 更改当前目录
函数原型
FRESULT f_chdir (
const TCHAR* path /* [IN] Path name */
);
形参
指向以null结尾的字符串的指针,该字符串指定要设置为当前目录的目录。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NO_PATH, FR_INVALID_NAME, FR_INVALID_DRIVE, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE
描述
f_chdir函数更改逻辑驱动器的当前目录。此外,当使用Unix样式的驱动器前缀时(FF_STR_VOLUME_ID==2),当前驱动器也将更改。每个逻辑驱动器的当前目录初始化为装载时的根目录。
请注意,当前目录保留在每个文件系统对象中,而当前驱动器保留在静态变量中,因此它也会影响使用文件功能的其他任务。
示例
/* Change current direcoty of the current drive ("dir1" under root directory) */
f_chdir("/dir1");
/* Change current direcoty of current drive (parent directory of drive 2) */
f_chdir("2:..");
/* Change current direcoty of the drive "sdcard" (at DOS/Windows style volume ID) */
f_chdir("sdcard:/dir1");
/* Change current direcoty of the drive "flash" and set it as current drive (at Unix style volume ID) */
f_chdir("/flash/dir1");
f_chdrive - 修改当前驱动器
函数原型
FRESULT f_chdrive (
const TCHAR* path /* [IN] Logical drive number */
);
形参
path
指定要设置为当前驱动器的逻辑驱动器号。
返回值
FR_OK, FR_INVALID_DRIVE
描述
f_chdrive功能仅更改当前驱动器。当前驱动器号的初始值为0。在Unix风格的驱动器前缀配置中,不需要此函数,因为f_chdir函数也会更改当前驱动器。请注意,当前驱动器保留在静态变量中,因此它也会影响使用文件函数的其他任务。
示例
f_chdrive("2:"); /* Set drive 2 as current drive */
f_chdrive(""); /* No effect (set current drive as current drive) */
f_getcwd - 检索当前目录和驱动器
函数原型
FRESULT f_getcwd (
TCHAR* buff, /* [OUT] Buffer to return path name */
UINT len /* [IN] The length of the buffer */
);
形参
buff
指向接收当前目录字符串的缓冲区的指针。
len
缓冲区的大小(以TCHAR为单位)。
返回值
FR_OK, FR_DISK_ERR, FR_INT_ERR, FR_NOT_READY, FR_NOT_ENABLED, FR_NO_FILESYSTEM, FR_TIMEOUT, FR_NOT_ENOUGH_CORE
描述
f_getcwd函数检索当前驱动器的当前目录的完整路径名。当FF_VOLUMES>=2时,将在路径名中添加标题驱动器前缀。驱动器前缀的样式取决于FF_STR_VOLUME_ID。
注意:在此版本中,此函数无法检索exFAT卷上的当前目录路径。它总是返回根目录路径。
示例
FRESULT fr;
TCHAR str[SZ_STR];
fr = f_getcwd(str, SZ_STR); /* Get current directory path */