读取SD卡里文件长度,函数参数不知如何设置

dsoyy 2008-11-13 04:57:10
程序如下:
uint32 OSFileRead(void *Buf, uint32 Size, HANDLE Handle) //读文件内容
参数说明:
** 输 入: Buf:保存读回的数据
** Size:要读的字节数
** Handle:文件句柄
** 输 出: 实际读到的字节数

说明:因为我要读取整个文件长度如TXT和.JPG文件,所以Size(要读的字节数)要替换成文件的长度,因此引出另外一个函数:
uint8 GetFDTInfo(FDT *Rt,uint8 Drive, uint32 ClusIndex, uint32 Index)
函数说明:
** 功能描述: 获取指定目录指定文件(目录)信息
**
** 输 入: Rt:存储返回信息的指针
** Drive:驱动器号
** ClusIndex:目录首簇号
** Index:文件(目录)在FDT中的位置
** 输 出: RETURN_OK:成功


/* 目录表数据结构 */
typedef struct _FDT
{
char Name[11]; //短文件名主文件名
uint8 Attr; //文件属性
uint8 NTRes; //保留给NT
uint8 CrtTimeTenth; //建立时间(fat16保留)
uint16 CrtTime; //建立时间(fat16保留)
uint16 CrtDate; //建立日期(fat16保留)
uint16 LstAccDate; //最后访问日期(fat16保留)
uint16 FstClusHI; //起始簇号高两个字节(fat16保留)
uint16 WrtTime; //最后写时间
uint16 WrtDate; //最后写日期
uint16 FstClusLO; //起始簇(cluster)号低两个字节
uint32 FileSize; //文件大小
} FDT;

/********************************/
/* ZLG/FS需包含的头文件 */
/********************************/
#define MAX_OPEN_FILES 1

我的调用方法:
MY_FILE Fileread[MAX_OPEN_FILES]; //定义一个结构体
GetFDTInfo(0,0, Fileread[FHandle].FstClus, 0); //获取文件信息
OSFileRead(rcv_buf, Fileread[FHandle].FileSize, FHandle); //读取文件内容
说明:
FHandle为指定读取文件的文件句柄,关键在于
GetFDTInfo(0,0, Fileread[FHandle].FstClus, 0); //获取文件信息
这个函数形参的设定
Drive(驱动器号):0
其余的参数设置很迷茫,请指教
...全文
226 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
dsoyy 2008-11-15
  • 打赏
  • 举报
回复
解决了。用的另外方案。
dsoyy 2008-11-14
  • 打赏
  • 举报
回复
upUP
postfix2 2008-11-14
  • 打赏
  • 举报
回复
很简单啊,多看看代码
星羽 2008-11-13
  • 打赏
  • 举报
回复
up
hailongchang 2008-11-13
  • 打赏
  • 举报
回复
对于目录首簇号,你知道高字节和低字节,可以算出来

对于uint32 Index,FDT应该是存储在一个数组中,比如FDT_ARRAY[100],而这个Index,
应该就是你要获取的目录所在的FDT 在这个FDT数组中的位置,0-99

根据FDT_ARRAY[i].Name[11]中的目录名称得到这个i 就是Index了
dsoyy 2008-11-13
  • 打赏
  • 举报
回复
能具体点吗
hailongchang 2008-11-13
  • 打赏
  • 举报
回复
起始簇高低字节都已经知道了,可以算出目录首簇号

文件(目录)在FDT中的位置 就应该是目录在FDT表中的索引吧

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧