提示:以下是本篇文章正文内容,下面案例可供参考
char buf[1024][1024];
int replace_infile(char * file,int line,char * data)
{
int i;
FILE *fp = fopen(file, "r");//读方式打开文件
for(i=0;i<10;i++)
{
fgets(buf[i], 32, fp);
}
fclose(fp);//关闭文件
strcpy(buf[line-1], data);//插入到第8行。
fp=fopen(file, "w"); //写方式打开文件。
for(i = 0; i < 10; i ++)//写入所有处理后的数据
{
fputs(buf[i],fp);
}
fclose(fp);//关闭文件。
return 0;
}
int read_line_main(char * testfile){
int c,length;
FILE *fp1; //打开文件
fp1 = fopen(testfile, "r+");
//打开文件,"r+"为访问模式:打开一个用于更新的文件,可读取也可写入。该文件必须存在。
if(NULL == fp1)
{
printf("fopen failed!\n");
exit(1);
}
//计算行数
while((c = fgetc(fp1)) != EOF)
//C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
{
if(c == '\n')//碰到换行符,则行数+1
length++;
}
//printf("该文件中的行数为:%d\n", length);//输出文件中的行数
fclose(fp1);//关闭文件
return length;
}
int file_read_line()
{
//读
char buf[MAX_LINE]; /*缓冲区*/
FILE *fp; /*文件指针*/
int len; /*行字符个数*/
//读
if((fp = fopen("test.txt","r")) == NULL)
{
perror("fail to read");
exit (1) ;
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
len = strlen(buf);
buf[len-1] = '\0'; /*去掉换行符*/
printf("%s %d \n",buf,len - 1);
}
return 0;
}
int add_data_after(char * file,int line,char * data,int line_num)
{
int i,j,l;
FILE *fp = fopen(file, "r");//读方式打开文件
char buf[504][1024];
char newbuf[504][1024];
if(line>line_num){
return 0;
}
for(i=0;i<line_num;i++)
{
fgets(buf[i], 32, fp);
strcpy(newbuf[i], buf[i]);//
}
fclose(fp);//关闭文件
strcpy(newbuf[line-1], data);//
for(i=line;i<line_num;i++)
{
strcpy(newbuf[i], buf[i-1]);//插入到第8行。
}
fp=fopen(file, "w"); //写方式打开文件。
for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据
{
fputs(newbuf[i],fp);
}
printf("inser ok\n");
fclose(fp);//关闭文件。
return 0;
}
int add_data_last_line(char * file,int line,char * data,int line_num)
{
int i,j;
FILE *fp = fopen(file, "r");//读方式打开文件
char buf[504][1024];
char newbuf[504][1024];
if(line>line_num){
return 0;
}
printf("\n\n");
for(i=0;i<line_num;i++)
{
fgets(buf[i], 32, fp);
//printf(" strlen %d buf %s",strlen(buf[i]),buf[i] );
for(j=0;j<strlen(buf[i]);j++)
{
newbuf[i][j]= buf[i][j];
printf(" %c", newbuf[i][j]) ;
}
}
fclose(fp);//关闭文件
strcpy(newbuf[i], data);//插入到第8行。
printf(" %s", newbuf[i]);
fp=fopen(file, "w"); //写方式打开文件。
for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据
{
fputs(newbuf[i],fp);
}
printf("inser ok\n");
fclose(fp);//关闭文件。
return 0;
}
提示:这里对文章进行总结:
#include
#include
#define MAX_LINE 1024
//答应对应行数据
int replace_infile(char * file,int line,char * data,int line_num)
{
int i;
FILE *fp = fopen(file, "r");//读方式打开文件
char buf[1024][1024];
if(line>line_num){
return 0;
}
printf("line_num %d\n",line_num);
for(i=0;i<line_num;i++)
{
fgets(buf[i], 32, fp);
}
fclose(fp);//关闭文件
strcpy(buf[line-1], data);//插入到第8行。
fp=fopen(file, "w"); //写方式打开文件。
for(i = 0; i < 10; i ++)//写入所有处理后的数据
{
fputs(buf[i],fp);
}
printf("inser ok\n");
fclose(fp);//关闭文件。
return 0;
}
int file_read_line(char * file,int line,int line_num)
{
//读
char buf[MAX_LINE]; /*缓冲区*/
FILE *fp; /*文件指针*/
int len; /*行字符个数*/
int count=0;
//读
if(line>line_num){
return 0;
}
if((fp = fopen(file,"r")) == NULL)
{
perror("fail to read");
exit (1) ;
}
while(fgets(buf,MAX_LINE,fp) != NULL)
{
if(count==line-1){
len = strlen(buf);
buf[len-1] = '\0'; /*去掉换行符*/
printf("\n line %d data is %s \n",line,buf );
break;
}
count++;
}
fclose(fp);//关闭文件。
return 0;
}
int add_data_last_line(char * file,int line,char * data,int line_num)
{
int i,j;
FILE *fp = fopen(file, "r");//读方式打开文件
char buf[504][1024];
char newbuf[504][1024];
if(line>line_num){
return 0;
}
printf("\n\n");
for(i=0;i<line_num;i++)
{
fgets(buf[i], 32, fp);
//printf(" strlen %d buf %s",strlen(buf[i]),buf[i] );
for(j=0;j<strlen(buf[i]);j++)
{
newbuf[i][j]= buf[i][j];
printf(" %c", newbuf[i][j]) ;
}
}
fclose(fp);//关闭文件
strcpy(newbuf[i], data);//插入到第8行。
printf(" %s", newbuf[i]);
fp=fopen(file, "w"); //写方式打开文件。
for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据
{
fputs(newbuf[i],fp);
}
printf("inser ok\n");
fclose(fp);//关闭文件。
return 0;
}
int add_data_after(char * file,int line,char * data,int line_num)
{
int i,j,l;
FILE *fp = fopen(file, "r");//读方式打开文件
char buf[504][1024];
char newbuf[504][1024];
if(line>line_num){
return 0;
}
for(i=0;i<line_num;i++)
{
fgets(buf[i], 32, fp);
strcpy(newbuf[i], buf[i]);//插入到第8行。
}
fclose(fp);//关闭文件
strcpy(newbuf[line-1], data);//插入到第8行。
for(i=line;i<line_num;i++)
{
strcpy(newbuf[i], buf[i-1]);//插入到第8行。
}
fp=fopen(file, "w"); //写方式打开文件。
for(i = 0; i < line_num+1; i ++)//写入所有处理后的数据
{
fputs(newbuf[i],fp);
}
printf("inser ok\n");
fclose(fp);//关闭文件。
return 0;
}
//统计行数
int read_line_main(char * testfile){
int c,length;
FILE *fp1; //打开文件
fp1 = fopen(testfile, "r+");
//打开文件,"r+"为访问模式:打开一个用于更新的文件,可读取也可写入。该文件必须存在。
if(NULL == fp1)
{
printf("fopen failed!\n");
exit(1);
}
//计算行数
while((c = fgetc(fp1)) != EOF)
//C 库函数 int fgetc(FILE *stream) 从指定的流 stream 获取下一个字符(一个无符号字符),并把位置标识符往前移动。
{
if(c == '\n')//碰到换行符,则行数+1
length++;
}
//printf("该文件中的行数为:%d\n", length);//输出文件中的行数
fclose(fp1);//关闭文件
return length;
}
int main(){
file_read_line("my.txt",2,read_line_main("my.txt"));
//replace_infile("my.txt",2,"11111\n",read_line_main("my.txt"));
add_data_after("my.txt",2,"kkk\n",read_line_main("my.txt"));
file_read_line("my.txt",3,read_line_main("my.txt"));
return 0;
}