在使用ZLG/FS时,在其中的读文件函数中(位于File.c文件中),代码如下:<br />/***************************<br />** 函数名称: FileRead<br />** 功能描述: 读取文件<br />** 输 入: Buf:保存读回的数据<br />** Size:要读的字节数<br />** Handle:文件句柄<br />** 输 出: 实际读到的字节数<br />** 全局变量: 无<br />** 调用模块: 无<br />** 作 者: 陈明计<br />** 日 期: 2003年6月5日<br />*****************/<br /> uint32 FileRead(void *Buf, uint32 Size, HANDLE Handle)<br />{<br /> uint8 *temp;<br /> uint32 i;<br /> temp = (uint8 *)Buf;<br /> for (i = 0; i < Size; i++)<br /> {<br /> if (FileGetCh(temp, Handle) != RETURN_OK)<br /> {<br /> break;<br /> }<br /><br /> // 读到文件的尾部时,应该自动退出<br /> // add by qq<br /> if (FileInfo[Handle].Offset == FileInfo[Handle].FileSize)<br /> {<br /> i++; // 读到的数据个数加一<br /> break;<br /> }<br /> <br /> temp++;<br /> }<br /> return i;<br />}<br /><br />原来的代码在读数据时,并没有判断如果本次读取的数据个数已经超过了文件的大小,因此当读到文件尾部时,文件的大小突然会变化,具体代码没有仔细跟踪下去了,再后面利用FileEof判断文件的结尾就无法正确判断。因此在读文件期间,应该加入判断,避免到了文件的尾部,还在读取。<br /><br />我使用的是老的ZLG/FS,在LPC213X光盘的附带的,不知最新的版本是否已经修改了。在这里提出来,希望使用者引起重视<br /><br /><br /><br /> |
|