Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
seek
DFS seekdir 之后readdir 不正确
发布于 2012-06-24 12:02:55 浏览:3610
订阅该版
测试代码如下 ```c void get_pf(char * fn,long of) { DIR * dir; struct dirent * dirent; char dirpath[FULLPATH_MAX_LENGTH]; //存储目录 char filename[FILENAME_MAX_LENGTH]; //存储文件名 get_dir_fname(fn,dirpath,filename); //根据全路径得到当前目录及文件名 rt_kprintf("dirpath is %s,filename is %s. ",dirpath,filename); dir = opendir(dirpath); //打开目录 //test rewinddir(dir); long offset; do { dirent = readdir(dir); offset = telldir(dir); rt_kprintf(" -file is:%s,offset is:%d ",dirent->d_name,offset); }while(dirent != RT_NULL); seekdir(dir,of); //获取上一个文件 dirent = readdir(dir); offset = telldir(dir); rt_kprintf(" current file is:%s,offset is:%d ",dirent->d_name,offset); closedir(dir); } FINSH_FUNCTION_EXPORT(get_pf,get next file name); ``` 输出结果如下: ``` finsh>>get_pf("/ka.wav",780) dirpath is /,filename is KA.WAV. -file is:10746~1.FLA,offset is:0 -file is:SEASON.MP3,offset is:260 -file is:KINGOF~1.MP3,offset is:520 -file is:1.APE,offset is:780 -file is:K.WAV,offset is:1040 -file is:REC.WAV,offset is:1300 -file is:1.CUE,offset is:1560 -file is:SESSION.LOG,offset is:1820 -file is:TEST.DAT,offset is:2080 -file is:KA.WAV,offset is:2340 -file is:A,offset is:2600 -file is:Z,offset is:2860 -file is: 璕,offset is:3120 current file is:KINGOF~1.MP3,offset is:780 0, 0x00000000 finsh>>get_pf("/ka.wav",1040) dirpath is /,filename is KA.WAV. -file is:10746~1.FLA,offset is:0 -file is:SEASON.MP3,offset is:260 -file is:KINGOF~1.MP3,offset is:520 -file is:1.APE,offset is:780 -file is:K.WAV,offset is:1040 -file is:REC.WAV,offset is:1300 -file is:1.CUE,offset is:1560 -file is:SESSION.LOG,offset is:1820 -file is:TEST.DAT,offset is:2080 -file is:KA.WAV,offset is:2340 -file is:A,offset is:2600 -file is:Z,offset is:2860 -file is: 璕,offset is:3120 current file is:KINGOF~1.MP3,offset is:1040 0, 0x00000000 finsh>>get_pf("/ka.wav",2340) dirpath is /,filename is KA.WAV. -file is:10746~1.FLA,offset is:0 -file is:SEASON.MP3,offset is:260 -file is:KINGOF~1.MP3,offset is:520 -file is:1.APE,offset is:780 -file is:K.WAV,offset is:1040 -file is:REC.WAV,offset is:1300 -file is:1.CUE,offset is:1560 -file is:SESSION.LOG,offset is:1820 -file is:TEST.DAT,offset is:2080 -file is:KA.WAV,offset is:2340 -file is:A,offset is:2600 -file is:Z,offset is:2860 -file is: 璕,offset is:3120 current file is:1.CUE,offset is:2340 0, 0x00000000 ``` 我本来想要得到当前文件的上一个文件,这个测试代码是看能不能跳到指定的offset处去,但是如上,只要offset大于780以上的都得不到正确的文件。 如第二个输入,最后的输出应该是1.APE才对啊
查看更多
7
个回答
默认排序
按发布时间排序
bernard
2012-06-24
这家伙很懒,什么也没写!
RT-Thread版本号是多少?
ffgamelife
2012-06-24
这家伙很懒,什么也没写!
finsh显示的版本号是 1.0.1 build Jun 14 2012
prife
2012-06-25
这家伙很懒,什么也没写!
用GCC在PC上测试了一下。效果如下: ``` #include
#include
#include
#include
#include
#define SET_OFFSET 4 int main() { DIR *dirp; struct dirent *dp; long int loc; dirp=opendir("."); while ((dp=readdir(dirp))!=NULL) { loc=telldir(dirp); printf(" -file name:%s off:%d ",dp->d_name, loc); } closedir(dirp); printf("———分割线——— "); dirp=opendir("."); printf("set loc = %d ", SET_OFFSET); seekdir(dirp,SET_OFFSET);//设置目录流目录项指针 if ((dp=readdir(dirp))!=NULL) { loc=telldir(dirp); printf(" -file name:%s off:%d ",dp->d_name, loc); } return (0); } ``` -file name:. off:1 -file name:.. off:2 -file name:1.txt off:3 -file name:125.txt off:4 -file name:2.txt off:5 -file name:3.txt off:6 -file name:4.txt off:7 -file name:5.txt off:8 -file name:testfile.exe off:9 ———分割线——— set loc = 4 -file name:2.txt off:5
prife
2012-06-25
这家伙很懒,什么也没写!
楼主发的代码有一个小bug。 这里重贴一下。 经过仔细检查。bug是在ELM FATFS中,与RT-Thread源码无关。 ``` #include
void get_pf(char * fn,long of) { DIR * dir; struct dirent * dirent; long offset; rt_kprintf("dirpath is %s. ",fn); dir = opendir(fn); //打开目录 //test rewinddir(dir); while ((dirent = readdir(dir)) != RT_NULL) { offset = telldir(dir); rt_kprintf(" -file off:%4d, name:%s, d->num:%d, d->cur:%d ", offset, dirent->d_name, dir->num, dir->cur); } seekdir(dir,of); //获取上一个文件 dirent = readdir(dir); offset = telldir(dir); rt_kprintf("-------------------------------------- "); rt_kprintf(" -file off:%4d, name:%s ", offset, dirent->d_name); closedir(dir); } FINSH_FUNCTION_EXPORT(get_pf,get next file name); ```
rogerz
2012-07-01
这家伙很懒,什么也没写!
>用GCC在PC上测试了一下。效果如下: > > >``` >#include
>#include
>#include
>#include
>#include
> >#define SET_OFFSET 4 >int main() >{ > DIR *dirp; > struct dirent *dp; > long int loc; > > dirp=opendir("."); > while ((dp=readdir(dirp))!=NULL) > { > loc=telldir(dirp); > printf(" -file name:%s off:%d >",dp->d_name, loc); > } > closedir(dirp); > > printf("———分割线——— >"); > > dirp=opendir("."); > > printf("set loc = %d >", SET_OFFSET); > seekdir(dirp,SET_OFFSET);//设置目录流目录项指针 > if ((dp=readdir(dirp))!=NULL) > { > loc=telldir(dirp); > printf(" -file name:%s off:%d >",dp->d_name, loc); > } > return (0); >} >``` > > > > -file name:. off:1 > -file name:.. off:2 > -file name:1.txt off:3 > -file name:125.txt off:4 > -file name:2.txt off:5 > -file name:3.txt off:6 > -file name:4.txt off:7 > -file name:5.txt off:8 > -file name:testfile.exe off:9 >———分割线——— >set loc = 4 > -file name:2.txt off:5 --- readdir会改变dir的当前索引的,要获取目录的offset,需要先调用telldir(),再调用readdir()。
prife
2012-07-01
这家伙很懒,什么也没写!
这个bug已经在svn上修正,如有需要,请升级。 [http://code.google.com/p/rt-thread/source/detail?r=2198](http://code.google.com/p/rt-thread/source/detail?r=2198) 多谢rogerz的补丁。
撰写答案
登录
注册新账号
关注者
0
被浏览
3.6k
关于作者
ffgamelife
这家伙很懒,什么也没写!
提问
4
回答
2
被采纳
0
关注TA
发私信
相关问题
1
BSD的一些代码分析
2
RT-Thread文件系统
3
怎么文档,源码还是没有呀??
4
[ZT]嵌入式LwIP协议栈的内存管理
5
RTLinux/RTCore体系结构
6
RTLinux/RTCore局限性
7
怎样获取源码
8
[ZT]The lightest lightweight threads, Protothreads
9
[ZT]微内核操作系统及L4概述
10
关于操作系统对C++操作符的使用
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
机器人操作系统 (ROS2) 和 RT-Thread 通信
4
国产MCU移植系列教程汇总,欢迎查看!
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
最新文章
1
RT-Thread Vision Board - Bare Metal Project with VSCode/PyOCD/Cortex-Debug
2
【学习分享】libc切换 -- 从newlib切换到mlibc
3
FRDM-MCXN947开发板之i2c应用
4
esp32 s3使用cherryusb cdc
5
【Vision Board 创客营】Vision Board上的DAC实践
热门标签
RT-Thread Studio
串口
LWIP
SPI
Env
Bootloader
AT
ART-Pi
Hardfault
CAN总线
FinSH
USB
文件系统
DMA
RT-Thread
SCons
线程
RT-Thread Nano
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
ota在线升级
WIZnet_W5500
I2C_IIC
UART
flash
cubemx
packages_软件包
freemodbus
潘多拉开发板_Pandora
PWM
定时器
ADC
BSP
中断
编译报错
socket
keil_MDK
GD32
MicroPython
msh
Debug
ulog
SFUD
flashDB
SDIO总线
rt_mq_消息队列_msg_queue
本月问答贡献
用户名由3_15位
18
个答案
3
次被采纳
xiaorui
7
个答案
3
次被采纳
sakumisu
4
个答案
3
次被采纳
踩姑娘的小蘑菇
15
个答案
2
次被采纳
三世执戟
32
个答案
1
次被采纳
本月文章贡献
比特饼干
3
篇文章
8
次点赞
Z_Y
2
篇文章
5
次点赞
Alipay
2
篇文章
3
次点赞
xusiwei1236
2
篇文章
3
次点赞
yinxiangxv
2
篇文章
3
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部