本帖最后由 带枪的剑客 于 2016-8-22 16:57 编辑
在调通过f_readdir遍历文件夹下所有文件(也包括子文件夹下面的文件)和文件夹,出现以下两种情况:
1、比如A文件夹有1<2<3<4<5五个文件,创建时间1最早,5最迟(2,3,4依次排列),而且3和5是存放在A的子文件夹B里面;最后的结果是:只能读到并打印1,2,3,5四个文件,4读不到而且返回码是(0x09 | FR_INVALID_OBJECT,/* (9) The file/directory object is invalid */),下面是运行结果。
mf_scan_files("0:/A")
0:/A/1.txt
0:/A/2.txt
0:/A/B
0:/A/B/3.txt
0:/A/B/5.txt
=0X9;
2、当从根文件夹开始读的时候(如调用mf_scan_files("0:")),会出现如下结果返回码也是(0x09):
mf_scan_files("0:")
0:/System Volume Information
0:/System Volume Information/IndexerVolumeGuid
=0X9;
以上两种是什么原因呢?如何解决?
以下是代码:
u8 mf_scan_files(u8 * path)
{
FRESULT res;
int i;
char *fn; /* This function is assuming non-Unicode cfg. */
#if _USE_LFN
fileinfo.lfsize = _MAX_LFN * 2 + 1;
fileinfo.lfname = mymalloc(SRAMIN,fileinfo.lfsize);
#endif
res = f_opendir(&dir,(const TCHAR*)path);
if (res == FR_OK)
{
printf("
");
while(1)
{
res = f_readdir(&dir, &fileinfo);
if (res != FR_OK || fileinfo.fname[0] == 0) break;
// if (fileinfo.fname[0] == '.') continue;
#if _USE_LFN
fn = *fileinfo.lfname ? fileinfo.lfname : fileinfo.fname;
#else
fn = fileinfo.fname;
#endif
i = strlen((const TCHAR*)path);
if (fileinfo.fattrib & AM_DIR)
{
sprintf(&path[ i], "/%s", fn);
res = mf_scan_files(path);
if (res != FR_OK) break;
path [ i] =0;
} else {
printf("%s/%s
", path, fn);
}
}
f_closedir(&dir);
}
myfree(SRAMIN,fileinfo.lfname);
return res;
}
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
一周热门 更多>