没有直接读取某一行的,但是有读取一行的,所以就可以按照行来读,要读取第n行,必须找到第n-1行 => 则必须找到n-2行 … 必须找到第1行。所以例如读取第10行的字符串,只能一行一行找。
参考下面的代码,按照下面代码的流程一行一行读就行了,一直等读到你需要的行。
#include
//读取filename文件(路径)、第 whichLine+1 行文本。
char * ReadSpeacialLine(char *filename, int whichLine)
{
FILE *fp;
int currentLine = 0; //当前读取的行
char strLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if ((fp = fopen(filename, "r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while (!feof(fp)) // 检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0
{
if (currentLine == whichLine)
{
fgets(strLine, 1024, fp); //读取一行
//printf("%s", strLine); //输出
return strLine;
}
fgets(strLine, 1024, fp); //读取一行,并定位到下一行
currentLine++;
}
fclose(fp); //关闭文件
return NULL;
}
int main() {
char txtFile[] = "test.txt";
int i = 11;
printf("第%d行n%s", i+1
, ReadSpeacialLine(txtFile, i)); //ReadSpeacialLine返回的字符串里自带换行
getchar(); //防止结束闪退
return 0;
}
没有直接读取某一行的,但是有读取一行的,所以就可以按照行来读,要读取第n行,必须找到第n-1行 => 则必须找到n-2行 … 必须找到第1行。所以例如读取第10行的字符串,只能一行一行找。
参考下面的代码,按照下面代码的流程一行一行读就行了,一直等读到你需要的行。
#include
//读取filename文件(路径)、第 whichLine+1 行文本。
char * ReadSpeacialLine(char *filename, int whichLine)
{
FILE *fp;
int currentLine = 0; //当前读取的行
char strLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if ((fp = fopen(filename, "r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while (!feof(fp)) // 检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0
{
if (currentLine == whichLine)
{
fgets(strLine, 1024, fp); //读取一行
//printf("%s", strLine); //输出
return strLine;
}
fgets(strLine, 1024, fp); //读取一行,并定位到下一行
currentLine++;
}
fclose(fp); //关闭文件
return NULL;
}
int main() {
char txtFile[] = "test.txt";
int i = 11;
printf("第%d行n%s", i+1
, ReadSpeacialLine(txtFile, i)); //ReadSpeacialLine返回的字符串里自带换行
getchar(); //防止结束闪退
return 0;
}
举报