OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3050|回复: 7

FATFS文件系统,有读取文件日期信息的函数吗?

[复制链接]

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
发表于 2019-12-11 20:09:04 | 显示全部楼层 |阅读模式
1金钱
FATFS文件系统,有读取文件时间戳的函数吗?

找了半天没找到,只看到f_utime - Change timestamp of a file or sub-directory 可以改变文件的时间戳

为什么电脑能看到文件时间信息?

最佳答案

查看完整内容[请看2#楼]

这个就是时间啊
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

5

主题

424

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1020
金钱
1020
注册时间
2014-9-4
在线时间
199 小时
发表于 2019-12-11 20:09:05 | 显示全部楼层
Scorpio95 发表于 2019-12-12 12:59
__weak DWORD get_fattime(void) {
        /* Returns current time packed into a DWORD variable */
        uint3 ...

读这个就行了

读这个就行了


这个就是时间啊
https://github.com/WZTENG
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-12 09:09:47 | 显示全部楼层
顶顶顶
回复

使用道具 举报

5

主题

424

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1020
金钱
1020
注册时间
2014-9-4
在线时间
199 小时
发表于 2019-12-12 11:04:19 | 显示全部楼层
FILINFO类型结构体里面fdate和ftime,前提是diskio.c里面实现了get_fattime()函数
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-12 12:59:49 | 显示全部楼层
WZTENG 发表于 2019-12-12 11:04
FILINFO类型结构体里面fdate和ftime,前提是diskio.c里面实现了get_fattime()函数

__weak DWORD get_fattime(void) {
        /* Returns current time packed into a DWORD variable */
        uint32_t time;
        time=  ((DWORD)(Time_Value.year) << 25)        /* Year 2013 */
                        | ((DWORD)(Time_Value.month) << 21)                                /* Month 7 */
                        | ((DWORD)(Time_Value.date) << 16)                                /* Mday 28 */
                        | ((DWORD)(Time_Value.hour) << 11)                                /* Hour 0 */
                        | ((DWORD)(Time_Value.minute) << 5)                                /* Min 0 */
                        | ((DWORD)(Time_Value.second) >> 1);                                /* Sec 0 */
       
        return time;
}


这个函数功能:不是获得系统时间,用于改写文件的创建和修改时间吗
跟踪到ff.c中,好像是写文件的时间戳,不是读啊。
难道我理解错了?
回复

使用道具 举报

5

主题

424

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1020
金钱
1020
注册时间
2014-9-4
在线时间
199 小时
发表于 2019-12-12 13:19:24 | 显示全部楼层
Scorpio95 发表于 2019-12-12 12:59
__weak DWORD get_fattime(void) {
        /* Returns current time packed into a DWORD variable */
        uint3 ...

打开文件不是有返回结构体嘛,,在这个FILINFO里面,,,
https://github.com/WZTENG
回复

使用道具 举报

8

主题

72

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
292
金钱
292
注册时间
2018-8-14
在线时间
37 小时
 楼主| 发表于 2019-12-12 18:00:58 | 显示全部楼层
WZTENG 发表于 2019-12-12 13:22
这个就是时间啊

谢谢提醒,找到那个函数了 f_stat
那个FATFS文件系统带的说明有点坑
f_stat - Check existance of a file or sub-directory
有道翻译:f_stat -检查文件或子目录是否存在
在固件库里挨个翻带FILINFO结构体的函数,才看到正确的解释
FRESULT f_stat (const TCHAR* path, FILINFO* fno);      /* Get file status */

例子
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);
    }

谢谢大佬
回复

使用道具 举报

7

主题

59

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1159
金钱
1159
注册时间
2018-5-30
在线时间
151 小时
发表于 2019-12-17 16:51:45 | 显示全部楼层
DWORD get_fattime (void)
{
        u32 tim;
        
        tim = calendar.w_year - 1980;
        tim <<= 4;
        tim += calendar.w_month;
        tim <<= 5;
        tim += calendar.w_date;
        tim <<= 5;
        tim += calendar.hour;
        tim <<= 6;
        tim += calendar.min;
        tim <<= 5;
        tim += calendar.sec;
        return tim;
}
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-27 05:22

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表