uint32 OSFileRead(void *Buf, uint32 Size, HANDLE Handle);
Buf是保存读到的数据的指针,size是要读的字节数,Handle是文件句柄,返回值是实际读到的字节数。
我是这样用的:
char *FileNameRead = "A:\\toRead.txt";
char ReadFileData[] = "Read File Fail!";
void TASK3(void* pdata)
{
char buf1[4];
char buf[20];
HANDLE FHandleR;
pdata = pdata;
OSAddFileDriver(SDCammand);
strcpy(buf1, "rw");
strcpy(buf, FileNameRead);
FHandleR = OSFileOpen(buf, buf1);
OSFileRead( ReadFileData, 100, FHandleR);
OSFileClose(FHandleR);
Beep_1(10);//操作完成,鸣铃传信
OSRemoveFileDriver(0);
GUI_SetColor(WHITE, BLACK);
GUI_PutString8_8(10,U_LCD_YSIZE-30,ReadFileData);//显示
while(1)
{
OSTimeDly(OS_TICKS_PER_SEC);
}
}
我已经事先在SD卡中创建了toRead.txt文件,并且写了一句话(英文)在里面,
但是读数据不成功,ReadFileData的值始终是 "Read File Fail!"
哪位高人指点下怎么回事啊~~~~~!~~~我都快疯掉了
【注】:写数据OSFileWrite是成功的。
------解决方案--------------------
题外话,现在的ZLG/FS支持长文件名了吗?以前用的时候只支持短文件名。
------解决方案--------------------
很好的呢啊。学习了啊
------解决方案--------------------
检查一下,到底是死循环还是出现数据等异常
------解决方案--------------------
void Read_word(char * name)
{
char flag_end2 = 0;
char buf2[8];
char buff[20];
uint32 count2 = 0;
HANDLE FHandle;
strcpy(buf2, "rw");
strcpy(buff, name);
FHandle = OSFileOpen(buff, buf2);
flag_end2 = 0;
{
OSFileSeek(FHandle, count2, SEEK_SET); // 移动文件读\写位置
count = OSFileRead(pic_file1, READNUM2, FHandle);//读取文件
}
OSFileClose(FHandle);
}
void Task0 (void *pdata)
{
uint32 i ;
pdata = pdata;
Full_LCD(RED); //背景色
state = OSAddFileDriver(SDCammand); //增加ATA设备0
while(1)
{
Read_word(wordName1); //读汉字
while(1);
}