OpenEdv-开源电子网

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

f_readdir读取文件如何顺序排列

[复制链接]

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-12-15
在线时间
0 小时
发表于 2015-12-16 09:59:44 | 显示全部楼层 |阅读模式
5金钱
用原子探索者平台开发在使用fatfs文件系统时遇到一个问题,通过f_readdir读取到的文件列表没有升序排列。
主要函数:
    f_open(fp, filename, FA_OPEN_ALWAYS|FA_READ|FA_WRITE) //创建文件
   while(1)
    {
      res = f_readdir(&dir, &fileinfo); //读取文件夹
      if(res != FR_OK || fileinfo.fname[0] == 0) break;
       printf("filename: %s, dir.index=%d \r\n", fileinfo.fname, dir.index); //打印列表
    }
第一步:
    用f_open,创建1,2,3,4,5 5个txt文件。
    用f_readir读取文件夹,可以读到1,2,3,4,5顺序排列的文件 (这一步正常)
   filename: 1.txt, dir.index=1
    filename: 2.txt, dir.index=2
    filename: 3.txt, dir.index=3
    filename: 4.txt, dir.index=4
    filename: 5.txt, dir.index=5

第二步:
    用f_unlink删除文件2,4.
     用f_readir读取文件夹,可以读到1,3,5顺序排列的文件 (这一步也正常)
     filename: 1.txt, dir.index=1
     filename: 3.txt, dir.index=3
     filename: 5.txt, dir.index=5

第三步:
    用f_open,创建6.txt 和7.txt.
    用f_readir读取文件夹,新建的文件插入到原来删除的序列中, 而不是加在最后,实际读取到的文件列表不是按照顺序排列。
     filename: 1.txt, dir.index=1
     filename: 6.txt, dir.index=6
     filename: 3.txt, dir.index=3
     filename: 7.txt, dir.index=7

     filename: 5.txt, dir.index=5

求助论坛高手,如何才能让后来新建的文件的dir.index从最后开始计算,怎样才能使读取到顺序排列的文件列表,比如:
     filename: 1.txt
     filename: 3.txt
     filename: 5.txt
     filename: 6.txt, 

     filename: 7.txt, 

最佳答案

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

这是没办法的。。。。 你只能说读出来的时候,自己去排序,还差不多。
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-12-16 09:59:45 | 显示全部楼层
这是没办法的。。。。
你只能说读出来的时候,自己去排序,还差不多。
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

1

主题

2

帖子

0

精华

新手入门

积分
26
金钱
26
注册时间
2015-12-15
在线时间
0 小时
 楼主| 发表于 2015-12-22 23:43:30 | 显示全部楼层
一篇帖子里看到原子哥提到:“fatfs里面,f_readdir,都是按存储顺序,从头读到尾的,每个文件有个索引号。”
官方的说明“The f_readdir function reads directory items, informations about file and directory, in sequence”, f_readdir按顺序读取目录内文件。

可能和我们想要得到的文件排序不同:
有一种情况,文件存储不是按顺序,比如顺序存储,当中间序列部分的文件被删除,对应的索引号也会被删除。新创建的文件的索引号不是加在最后,而是插入序列中而使用被删的索引号。 
f_readir所提到的读取目录内文件的顺序,应该不是指写入磁盘的顺序,而是按写入磁盘空间index的顺序。不知道我的理解是否正确?


用f_readdir读取出来,自己再排序确实能够解决问题。
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165371
金钱
165371
注册时间
2010-12-1
在线时间
2110 小时
发表于 2015-12-24 22:21:28 | 显示全部楼层
回复【3楼】小亮:
---------------------------------
是需要自己排序的。fatfs直接读取,不代表文件存储的顺序的!
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-2-25 21:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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