野火电子论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 9515|回复: 6

扫描文件

[复制链接]
发表于 2015-8-13 19:06:32 | 显示全部楼层 |阅读模式
   

res = f_opendir(&dir, path); //打开目录(衔接目录用)
    if (res == FR_OK)
   {
        i = strlen(path);
        for (;;)
    {
            res = f_readdir(&dir, &fno);           //读取目录下的内容
            if (res != FR_OK || fno.fname[0] == 0)
       break;  //为空时表示所有项目读取完毕,跳出
#if _USE_LFN
            fn = *fno.lfname ? fno.lfname : fno.fname;
#else
            fn = fno.fname;
#endif
            if (*fn == '.')
      
continue;            //点表示当前目录,跳过
上面是扫描文件的部分代码,我把断点设在最后一句 continue;   仿真时却从未在这里停止过,
那为什么还要这一句呢??
回复

使用道具 举报

 楼主| 发表于 2015-8-13 19:07:54 | 显示全部楼层
那为什么还要这两句呢,
            if (*fn == '.')
       continue;            //点表示当前目录,跳过
回复 支持 反对

使用道具 举报

发表于 2015-8-14 15:13:57 | 显示全部楼层
没有这句递归好像是跳不出来的吧,你注释它看看能不能正常
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-18 15:32:54 | 显示全部楼层
flyleaf 发表于 2015-8-14 15:13
没有这句递归好像是跳不出来的吧,你注释它看看能不能正常

TF卡用的是FAT32文件系统,注释掉仍可以正常工作,
用winHex软件分析,找到ISO_MINI文件夹所在的簇,如下:
为什么前面会有两个子目录的,
其中第1个名字为"."(这个在ISO_mini解释为当前子目录)
其中第2个名字为"..",那么这两个点的呢?
QQ图片201508181447221.PNG
QQ图片20150818144253.png




回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-18 15:43:28 | 显示全部楼层
明白了,文件名".",是指当前文件夹,并且标明了当前文件夹所在的簇号
文件名"..",是指上一级文件夹,并且标明了上一级文件夹所在的簇号
这两个的存在是方便递归.但程序为什么没有从这里出来呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-18 15:45:37 | 显示全部楼层
我觉得递归应该是从".."的文件名递归的,所以它才不会经过"."的文件名.
回复 支持 反对

使用道具 举报

 楼主| 发表于 2015-8-18 15:49:25 | 显示全部楼层
还是有疑问,既然"."文件名是存在的,那么为什么不会停下呢?
回复 支持 反对

使用道具 举报

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

本版积分规则

联系站长|手机版|野火电子官网|野火淘宝店铺|野火电子论坛 ( 粤ICP备14069197号 ) 大学生ARM嵌入式2群

GMT+8, 2024-9-22 22:25 , Processed in 0.042368 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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