前言
最近需要用C语言实现替换某一行的内容,可以使用两个函数:删除和插入函数,先删除某行然后在该行插入内容即可实现同样的效果!
删除函数
void deleteLine(char* FileName, int lineno)
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[500][256]={0};
char *p = Buf;
if ((fp = fopen(FileName, "r+")) == NULL)
{
printf("Can't open file!/n");
return;
}
while ((p = fgets(Buf, 256, fp)) != NULL)
{
Lid++;
if (Lid == lineno)
{
if ((p = fgets(Buf, 256, fp)) != NULL)
{
strcpy(tmp[Lid], Buf);
}
}
else
{
strcpy(tmp[Lid], Buf);
}
}
MaxLine = Lid;
rewind(fp);
fclose(fp);
remove(FileName); // 删除原文件
if((fp = fopen(FileName, "w")) == NULL)
{
printf("Can't open file!/n");
return;
}
for(Lid = 1; Lid <= MaxLine; Lid++)
{
fputs(tmp[Lid], fp);
}
fclose(fp);
}
其中形参FileName,lineno分别是文件名和行数
插入函数
void InsertLine(char* FileName, int Line, char str[256])
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[1024]="";
char tmp[500][1024]={0};
if ((fp=fopen(FileName,"r+")) == NULL)
{
printf("Can't open file!/n");
return;
}
while (fgets(Buf, 1024,fp))
{
Lid++;
if(Lid == Line)
{
strcpy(tmp[Lid++],str);
}
strcpy(tmp[Lid],Buf);
}
MaxLine=Lid;
rewind(fp);
for(Lid=1 ;Lid <= MaxLine;Lid++)
{
fputs(tmp[Lid],fp);
}
fclose(fp);
}
其中形参FileName,lineno,str分别是文件名,行数,替换的内容
使用方法
比如要将a.txt文件的第四行内容换成为“abcd”,则可以使用下面代码:
deleteLine(a.txt, 4);
InsertLine(a.txt,4,"abcd");
比如a.txt文件为:
1111
2222
3333
4444
5555
执行完代码替换之后为:
1111
2222
3333
abcd
5555