CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  C/C++ >  C语言

如何增加、删除、修改文件中指定的一行?

楼主xjb12(bobo)2005-03-28 13:51:51 在 C/C++ / C语言 提问

我这个代码删除的时候有问题,等,兄弟帮忙修改一下啊,实现增加到指定的位置一行、删除指定的一行、修改指定的一行的功能就可以了,非常感谢!  
  #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禁止或提示用户不能修改(删除、移动、重命名)指定的某文件夹

关键词

  • 修改
  • null
  • lid
  • 指定
  • 一行
  • 删除
  • maxline
  • fp
  • buf
  • tmp

得分解答快速导航

  • 帖主:xjb12
  • oyljerry
  • TangChin
  • Rudy_zhuang

相关链接

  • C/C++ Blog
  • C/C++类图书
  • C/C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo