c语言读取文件指定行
时间: 2023-12-30 21:21:07 浏览: 34
C语言读取文件指定行的方法有多种,以下是其中的三种方法:
1. 使用fgets()函数逐行读取文件,通过计数器判断是否到达指定行,如果到达则返回该行内容。示例代码如下:
```
char * ReadSpeacialLine(int i) {
char filename[] = "test.c"; //文件名
FILE *fp;
int WhichLine=i; //指定要读取哪一行
int CurrentIndex=0; //当前读取的行
char StrLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while (!feof(fp)) {
if (CurrentIndex==WhichLine) {
fgets(StrLine,1024,fp); //读取一行
printf("%s", StrLine); //输出
return StrLine;
}
fgets(StrLine,1024,fp); //读取一行,并定位到下一行
CurrentIndex++;
//printf("%s", StrLine); //输出
}
fclose(fp); //关闭文件
return NULL;
}
```
2. 使用fseek()函数定位到指定行的位置,然后使用fgets()函数读取该行内容。示例代码如下:
```
char * ReadSpeacialLine(int i) {
char filename[] = "test.c"; //文件名
FILE *fp;
int WhichLine=i; //指定要读取哪一行
char StrLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
fseek(fp, 0, SEEK_SET); //将文件指针定位到文件开头
for(int j=1; j<=WhichLine; j++) {
fgets(StrLine,1024,fp); //读取一行
}
printf("%s", StrLine); //输出
fclose(fp); //关闭文件
return StrLine;
}
```
3. 使用getline()函数逐行读取文件,通过计数器判断是否到达指定行,如果到达则返回该行内容。需要注意的是,getline()函数需要在编译时加上-D_GNU_SOURCE选项。示例代码如下:
```
#define _GNU_SOURCE
#include <stdio.h>
#include <stdlib.h>
char * ReadSpeacialLine(int i) {
char filename[] = "test.c"; //文件名
FILE *fp;
int WhichLine=i; //指定要读取哪一行
int CurrentIndex=0; //当前读取的行
char *StrLine = NULL; //每行最大读取的字符数,可根据实际情况扩大
size_t len = 0;
ssize_t read;
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while ((read = getline(&StrLine, &len, fp)) != -1) {
if (CurrentIndex==WhichLine) {
printf("%s", StrLine); //输出
return StrLine;
}
CurrentIndex++;
}
fclose(fp); //关闭文件
return NULL;
}
```
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)