FatFs文件和目录管理接口中文版

发布于:2022-11-28 ⋅ 阅读:(138) ⋅ 点赞:(0)

▼我是阿荣,关注我,在技术路上一起精进!▼

文件和目录管理

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 */
本文含有隐藏内容,请 开通VIP 后查看