如何增加、删除、修改文件中指定的一行?
我这个代码删除的时候有问题,等,兄弟帮忙修改一下啊,实现增加到指定的位置一行、删除指定的一行、修改指定的一行的功能就可以了,非常感谢!
#include <stdio.h>
#include <string.h>
void InsertLine(char* FileName,int L,char str[256])
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[50][256]={0};
//char str[256]="Good China\n";
if( (fp=fopen(FileName,"r+"))==NULL)
{
printf("Can't open file!\n");
return;
}
while( fgets(Buf,256,fp) )
{
Lid++;
if(Lid==L)
strcpy(tmp[Lid],str);
else
strcpy(tmp[Lid],Buf);
}
MaxLine=Lid;
rewind(fp);
for(Lid=1;Lid<=MaxLine;Lid++)
fputs(tmp[Lid],fp);
fclose(fp);
}
void cat(char *filepath)
{
int nl = 0;
FILE *stream;
char s[256];
char *p = s;
stream = fopen(filepath, "r+");
while((p = fgets(s, 256, stream)) != NULL)
{
nl++;
printf("Line %d: %s", nl, s);
}
fclose(stream);
}
void deleteLine(char* FileName,int lineno)
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[20][256]={0};
char *p = Buf;
// char str[256]="Good China\n";
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);
for(Lid=1;Lid<MaxLine;Lid++)
fputs(tmp[Lid],fp);
fclose(fp);
}
int main()
{
cat("c:\\xjb.txt");
printf("\n......................................................\n");
InsertLine("c:\\xjb.txt",3,"xjb\n");
cat("c:\\xjb.txt");
printf("\n......................................................\n");
deleteLine("c:\\xjb.txt",3);
printf("\n......................................................\n");
cat("c:\\xjb.txt");
return 0;
}
问题点数:100、回复次数:4Top
1 楼oyljerry(【勇敢的心】→ ㊣提拉米苏√㊣)回复于 2005-03-28 16:40:20 得分 10
修改需要读出来修改,再写入Top
2 楼TangChin(土狗)回复于 2005-03-28 16:56:42 得分 40
你先读出文件的内容再写回文件
你写回的时候,没有把文件的长度清为0。
在MaxLine=Lid;后面
fclose(fp);
fp = fopen(FileName,"w+");就好了Top
3 楼Rudy_zhuang(风筝)回复于 2005-03-28 20:46:05 得分 50
#include <stdio.h>
#include <string.h>
void InsertLine(char* FileName,int L,char str[256])
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[50][256]={0};
//char str[256]="Good China\n";
if( (fp=fopen(FileName,"r+"))==NULL)
{
printf("Can't open file!\n");
return;
}
while( fgets(Buf,256,fp) )
{
Lid++;
if(Lid==L)
strcpy(tmp[Lid++],str);
strcpy(tmp[Lid],Buf);
}
MaxLine=Lid;
rewind(fp);
for(Lid=1;Lid<=MaxLine;Lid++)
fputs(tmp[Lid],fp);
fclose(fp);
}
void cat(char *filepath)
{
int nl = 0;
FILE *stream;
char s[256];
char *p = s;
stream = fopen(filepath, "r+");
while((p = fgets(s, 256, stream)) != NULL)
{
nl++;
printf("Line %d: %s", nl, s);
}
fclose(stream);
}
void deleteLine(char* FileName,int lineno)
{
int Lid=0;
int MaxLine=0;
FILE* fp=NULL;
char Buf[256]="";
char tmp[20][256]={0};
char *p = Buf;
// char str[256]="Good China\n";
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);
}
int main()
{
cat("c:\\a.txt");
printf("\n......................................................\n");
InsertLine("c:\\a.txt",3,"7777\n");
cat("c:\\a.txt");
printf("\n......................................................\n");
deleteLine("c:\\a.txt",3);
printf("\n......................................................\n");
cat("c:\\a.txt");
return 0;
}
Top
4 楼zengwujun(月之海 为linux入门奋斗100天)回复于 2005-03-28 21:20:38 得分 0
markTop
相关问题
- 请教如何删除CRichEditCtrl中指定的某一行?
- 怎样删除文件中指定的一行
- 如何删除文件中指定的一行和在文件中指定位置增加一行?
- 客户端的COOKIE怎么删除? 指定SUBKEY怎么修改?
- 修改txt文件中的某一行或删除某一行的操作,请高手帮忙!
- 【求助】如何选中datagrid一行数据,然后添加一行,进行添加,修改,删除
- 简单问题:Clistctrl删除指定一行后,剩余多列如何按序排序?
- 两个问题.获得datagrid中当前行和删除datatable中指定一行的问题.
- 如何删除和修改一个用ADOQuery查找的结果集中的指定条?
- 用hook禁止或提示用户不能修改(删除、移动、重命名)指定的某文件夹




