文件和目录管理

f_stat

f_stat函数检查文件或子目录是否存在。

FRESULT f_stat(
  const TCHAR * path/ * [IN]对象名* / 
  FILINFO * fno         / * [OUT] FILINFO结构* / 如果不需要,则设置空指针。
);

描述

该f_stat功能检查文件或子目录的存在。如果不存在,则函数返回FR_NO_FILE。如果存在,该函数将返回FR_OK,并将有关对象,大小,时间戳和属性的信息存储到文件信息结构中。

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

f_unlink函数从卷中删除文件或子目录。

FRESULT f_unlink(
  const TCHAR *path  / * [IN]对象名* /
);

描述

如果要移除的对象的条件适用于以下条款,则该功能将被拒绝。

  • 文件/子目录不能具有只读属性(AM_RDO),否则该函数将被FR_DENIED拒绝。
  • 子目录必须为空,并且不能为当前目录,否则该函数将被FR_DENIED拒绝。
  • 不能打开文件/子目录,否则FAT卷可以折叠。启用文件锁定功能后,它将被安全拒绝。

f_rename

f_rename函数重命名和/或移动文件或子目录。

FRESULT f_rename(
  const TCHAR * old_name/ * [IN]旧对象名* / 
  const TCHAR * new_name   / * [IN]新对象名* /
);

描述

重命名文件或子目录,也可以将其移动到同一卷中的其他目录。要重命名的对象不能是打开的对象,否则FAT卷可以折叠。启用文件锁定功能后,可以安全拒绝此类错误操作。

    / *重命名默认驱动器中的对象* / 
    f_rename(“ oldname.txt”,“ newname.txt”);

    / *重命名驱动器2中的对象* / 
    f_rename(“ 2:oldname.txt”,“ newname.txt”);

    / *重命名对象并将其移动到驱动器中的另一个目录* / 
    f_rename(“ log.txt”,“ old / log0001.txt”);

 

f_chmod

f_chmod函数更改文件或子目录的属性。

FRESULT f_chmod(
  const TCHAR * path/ * [IN]对象名* / 
  BYTE attr/ * [IN]属性标志* / 
  BYTE mask          / * [IN]属性掩码* /
);
/ *设置为只读,清除存档,其他保持不变。* / 
 f_chmod(“ file.txt”,AM_RDO,AM_RDO | AM_ARC);

 

f_utime

f_utime函数更改文件或子目录的时间戳。

FRESULT f_utime(
  const TCHAR * path/ * [IN]对象名* / 
  const FILINFO * fno   / * [IN]要设置的时间和数据* /
);

 

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

f_mkdir函数创建一个新目录。

FRESULT f_mkdir(
  const TCHAR *path/ * [IN]目录名* /
);
    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

该f_chdir功能改变了逻辑驱动器的当前目录。

FRESULT f_chdir(
  const TCHAR *path/ * [IN]路径名* /
);

描述

该f_chdir功能改变了逻辑驱动器的当前目录。此外,当Unix样式卷ID,当前的驱动器将被改变FF_STR_VOLUME_ID == 2,被选中。每个逻辑驱动器的当前目录被初始化为安装时的根目录。

请注意,当前目录保留在每个文件系统对象中,而当前驱动器保留在静态变量中,因此它也影响使用文件功能的其他任务。

    / *更改当前驱动器的当前目录根目录下的“ dir1”)* / 
    f_chdir(“ / dir1”);

    / *更改当前驱动器的当前目录(驱动器2的父目录)* / 
    f_chdir(“ 2:..”);

    / *更改驱动器“ sdcard”的当前目录(以DOS / Windows风格的卷ID)* / 
    f_chdir(“ sdcard:/ dir1”);

    / *更改驱动器“ flash”的当前目录并将其设置为当前驱动器(以Unix风格的卷ID)* / 
    f_chdir(“ / flash / dir1”);

 

f_chdrive

f_chdrive函数更改当前驱动器。

FRESULT f_chdrive(
  const TCHAR *path/ * [IN]逻辑驱动器号* /  指定要设置为当前驱动器的逻辑驱动器号
);

 

描述

该f_chdrive功能仅更改当前驱动器。当前驱动器号的初始值为0。请注意,当前驱动器保留在静态变量中,因此它也影响使用文件功能的其他任务。

  f_chdrive(“ 2:”);  / *将驱动器2设置为当前驱动器* /

    f_chdrive(“”);    / *无作用(将当前驱动器设置为当前驱动器)* /

    f_chdrive(“ / flash”);  / *将驱动器“flash”设置为当前驱动器(以Unix样式的卷ID)* /

 

f_getcwd

f_getcwd函数检索当前驱动器的当前目录。

FRESULT f_getcwd(
  TCHAR * buff/ * [OUT]返回路径名的缓冲区* / 
  UINT len      / * [IN]缓冲区的长度* /
);

描述

该f_getcwd函数检索当前驱动器的当前目录的全路径名。当FF_VOLUMES > = 2时,会将标题驱动器前缀添加到路径名。驱动器前缀的样式取决于FF_STR_VOLUME_ID

注意:在此修订版中,此功能无法检索exFAT卷上的当前目录路径。它总是返回根目录路径。

FRESULT fr;
TCHAR str [SZ_STR];

fr = f_getcwd(str,SZ_STR); / *获取当前目录路径* /