Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
RT-Thread一般讨论
seek
DFS seekdir 之后readdir 不正确
发布于 2012-06-24 12:02:55 浏览:3923
订阅该版
测试代码如下 ```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.9k
关于作者
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
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
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
RTT 源码分析笔记——互斥量篇
2
[E/app.filesystem] SD card mount to '/sdcard' failed!
3
单片机也能聊天?RT-Thread上跑通大语言模型
4
【RT-Thread】【ci】【scons】将ci.attachconfig.yml和scons结合使用
5
Rt-thread中OTA下载后,bootloader不搬程序
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
DMA
USB
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
I2C_IIC
ESP8266
UART
WIZnet_W5500
ota在线升级
cubemx
PWM
flash
freemodbus
BSP
packages_软件包
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
编译报错
中断
Debug
rt_mq_消息队列_msg_queue
keil_MDK
SFUD
msh
ulog
C++_cpp
MicroPython
本月问答贡献
三世执戟
5
个答案
1
次被采纳
KunYi
4
个答案
1
次被采纳
RTT_逍遥
3
个答案
1
次被采纳
xiaorui
1
个答案
1
次被采纳
JonasWen
1
个答案
1
次被采纳
本月文章贡献
出出啊
1
篇文章
3
次点赞
小小李sunny
1
篇文章
1
次点赞
张世争
1
篇文章
3
次点赞
crystal266
2
篇文章
2
次点赞
whj467467222
2
篇文章
2
次点赞
回到
顶部
发布
问题
分享
好友
手机
浏览
扫码手机浏览
投诉
建议
回到
底部