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