static int readFileLineNumVal(char *pFilePath, unsigned int u8lineNum, char * preadDataBuf, unsigned int readLen)
{
char c;
FILE *fp = NULL;
unsigned int lineNum = 0;
unsigned char i = 0, j = 0;
//char readNumVal[32] = {0};
fp = fopen(pFilePath, "r+");
if(NULL == fp)
{
LOG("file %s open error\r\n", pFilePath);
return -1;
}
while((c = getc(fp)) != EOF)
{
if('\n' == c)
{
lineNum++;
if(lineNum > u8lineNum)
{
goto stopReadfile;
}
continue;
}
if(lineNum == u8lineNum)
{
if(i > readLen)
{
LOG("read file final\r\n");
goto stopReadfile;
}
preadDataBuf[i++] = c;
//printf("%02c", c);
}
}
stopReadfile:
fclose(fp);
fp = NULL;
//LOG("\nnow is ready. lineNum = %d, i= %d\n", lineNum, i);
return 0;
}
值得注意的是:上面的代码有一个效率的问题。就是如果本身文件不大的话,查找的实际的时间就和行数和每一行的字节数有关了。所以如果对查找的时间有需求的话,建议使用c++中的一些机制,可以提高查找的效率。可以参考:https://blog.csdn.net/u010299133/article/details/84591058