FATFS 初学之 f_chmod/ f_utime

f_chmod:

 1 /*-----------------------------------------------------------------------*/
 2 /* Change Attribute                                                      */
 3 /*-----------------------------------------------------------------------*/
 4 
 5 FRESULT f_chmod (
 6     const TCHAR *path,    /* Pointer to the file path */
 7     BYTE value,            /* Attribute bits */
 8     BYTE mask            /* Attribute mask to change */
 9 )
10 {
11     FRESULT res;
12     DIR dj;
13     BYTE *dir;
14     DEF_NAMEBUF;
15 
16 
17     res = chk_mounted(&path, &dj.fs, 1);
18     if (res == FR_OK) {
19         INIT_BUF(dj);
20         res = follow_path(&dj, path);        /* Follow the file path */
21         FREE_BUF();
22         if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT))
23             res = FR_INVALID_NAME;
24         if (res == FR_OK) {
25             dir = dj.dir;
26             if (!dir) {                        /* Is it a root directory? */
27                 res = FR_INVALID_NAME;
28             } else {                        /* File or sub directory */
29                 mask &= AM_RDO|AM_HID|AM_SYS|AM_ARC;    /* Valid attribute mask */
30                 dir[DIR_Attr] = (value & mask) | (dir[DIR_Attr] & (BYTE)~mask);    /* Apply attribute change */
31                 dj.fs->wflag = 1;
32                 res = sync(dj.fs);
33             }
34         }
35     }
36 
37     LEAVE_FF(dj.fs, res);
38 }
View Code

函数功能:修改一个文件或目录的属性。

描述:

f_chmod函数当_FS_READONLY == 0并且_FS_MINIMIZE == 0时可用。
f_chmod函数修改一个文件或目录的属性。

 

f_utime:

 1 /*-----------------------------------------------------------------------*/
 2 /* Change Timestamp                                                      */
 3 /*-----------------------------------------------------------------------*/
 4 
 5 FRESULT f_utime (
 6     const TCHAR *path,    /* Pointer to the file/directory name */
 7     const FILINFO *fno    /* Pointer to the time stamp to be set */
 8 )
 9 {
10     FRESULT res;
11     DIR dj;
12     BYTE *dir;
13     DEF_NAMEBUF;
14 
15 
16     res = chk_mounted(&path, &dj.fs, 1);
17     if (res == FR_OK) {
18         INIT_BUF(dj);
19         res = follow_path(&dj, path);    /* Follow the file path */
20         FREE_BUF();
21         if (_FS_RPATH && res == FR_OK && (dj.fn[NS] & NS_DOT))
22             res = FR_INVALID_NAME;
23         if (res == FR_OK) {
24             dir = dj.dir;
25             if (!dir) {                    /* Root directory */
26                 res = FR_INVALID_NAME;
27             } else {                    /* File or sub-directory */
28                 ST_WORD(dir+DIR_WrtTime, fno->ftime);
29                 ST_WORD(dir+DIR_WrtDate, fno->fdate);
30                 dj.fs->wflag = 1;
31                 res = sync(dj.fs);
32             }
33         }
34     }
35 
36     LEAVE_FF(dj.fs, res);
37 }
View Code

函数功能:f_utime函数修改一个文件或目录的时间戳。

描述:

f_utime函数当_FS_READONLY == 0并且_FS_MINIMIZE == 0时可用。
f_utime函数修改一个文件或目录的时间戳(即文件属性里的创建、修改、访问时间)。

 

例:

1 // 设置只读标志,清除存档标志,其他不变
2 f_chmod("file.txt", AR_RDO, AR_RDO | AR_ARC);
View Code

 

转载于:https://www.cnblogs.com/Danhuise/p/3911929.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FATFS 是一个用于嵌入式系统中的文件系统库,提供了对 FAT 文件系统的支持。它的 f_opendir 和 f_readdir 函数用于打开和读取目录。 f_opendir 函数用于打开一个目录,其函数原型如下: ``` FRESULT f_opendir ( DIR* dp, // 目录对象指针 const TCHAR* path // 目录路径 ); ``` 其中,dp 是一个指向 DIR 类型的目录对象指针,path 是一个指向以 null 结尾的目录路径字符串。函数返回值为 FRESULT 类型,指示函数的执行结果。 f_readdir 函数用于读取目录中的下一个文件或子目录,其函数原型如下: ``` FRESULT f_readdir ( DIR* dp, // 目录对象指针 FILINFO* fno // 文件信息结构体指针 ); ``` 其中,dp 是一个指向 DIR 类型的目录对象指针,fno 是一个指向 FILINFO 类型的文件信息结构体指针。函数返回值为 FRESULT 类型,指示函数的执行结果。 使用 f_opendir 函数打开目录后,可以使用 f_readdir 函数读取目录中的文件或子目录,直到读取完毕。例如,可以使用以下代码列出目录中的所有文件和子目录: ```c FRESULT res; DIR dir; FILINFO fno; char *path = "/"; res = f_opendir(&dir, path); if (res == FR_OK) { while (f_readdir(&dir, &fno) == FR_OK && fno.fname[0]) { if (fno.fattrib & AM_DIR) { printf("DIR %s\n", fno.fname); } else { printf("FILE %s\n", fno.fname); } } f_closedir(&dir); } ``` 这段代码会打开根目录,并逐个读取目录中的文件和子目录,然后输出它们的名称和类型。注意,在使用 f_readdir 函数读取目录时,需要检查返回的文件名是否为空,以判断是否已经读取完毕。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值