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

改写文件问题

楼主wshcdr(dd)2003-12-03 12:42:41 在 C/C++ / C语言 提问

#include   <stdio.h>  
  #include   <string.h>  
   
  void   main(   void   )  
  {  
        FILE   *stream;  
        FILE   *file;  
        FILE   *p_file;  
   
   
   
        char   line[200]   =   "\0";  
        char   strFinal[200]   =   "\0";  
        char   *p   =   NULL;  
        char   *p_Final   =   NULL;  
        int   Num   =   0;  
        int   i   =   0;  
        if(   (stream   =   fopen(   "C:\\original",   "r+t"   ))   !=   NULL   )  
        {  
        while(   !feof(   stream   )   )  
        {  
        if(   fgets(   line,   500,   stream   )   ==   NULL)  
        {  
         
    //     printf(   "fgets   error\n"   );  
        break;  
        }        
        else  
        {  
        p   =   &line[0];  
   
   
        while(*p!='\n')  
        {  
        p++;    
        }    
        *p++   =   ',';  
        *p++   =   '0';  
        *p++   =   's';  
        *p++   =   's';  
        *p++   =   '\n';  
        *p   =   '\0';  
   
          if(   (file   =   fopen(   "C:\\Final",   "a+"   ))   !=   NULL   )  
  {  
  fputs(line,   file);  
  }  
   
   
        }  
        }  
   
  printf("%s   \n",   Num);  
        fclose(   stream   );  
   
   
        }  
  }  
   
  上面的代码从original里按行读出文件  
  然后在每一行后面加上,0ss  
  写入Final  
   
  但是if(   (file   =   fopen(   "C:\\Final",   "a+"   ))   !=   NULL   )  
  这一句执行时,有时候会发生打不开Final的错误  
   
  怎么回事,  
   
  难道是打开的次数太频繁了??  
  有什么好的解决方法???  
   
   
  问题点数:30、回复次数:7Top

1 楼hanyixin(怡)回复于 2003-12-03 12:58:33 得分 10

 
  close了再open撒  
   
  Top

2 楼zhangfjj(小张)回复于 2003-12-03 13:15:23 得分 5

上面的代码从original里按行读出文件  
  然后在每一行后面加上,0ss  
  写入Final  
   
  但是if(   (file   =   fopen(   "C:\\Final",   "a+"   ))   !=   NULL   )  
  这一句执行时,有时候会发生打不开Final的错误  
   
  -------------------  
  有个办法,生成一个临时文件,读出的每一行,加上字符后,写入临时文件,做完以后,再写入原来的文件,你的程序会出问题的,以两种状态打开文件,同时对该文件进行读写  
  Top

3 楼yg_xh(果皮)回复于 2003-12-03 13:17:08 得分 5

if(   (file   =   fopen(   "C:\\Final",   "a+"   ))   !=   NULL   )  
  在循环中open了多次,没有对应打开的fclose语句Top

4 楼dislimit(风飘雪影)回复于 2003-12-03 14:28:57 得分 5

在while循环中文件打开了多次,有没有及时关闭呢?Top

5 楼saintshi(背叛自己)回复于 2003-12-03 18:44:11 得分 5

我试过win2000最多能打开128个文件句柄之后就再打开文件就会失败,你没关闭文件句柄所以循环几次以后就大不开文件了Top

6 楼zhouqingyuan(浪帆)回复于 2003-12-03 19:24:17 得分 0

开了东西在再开之前一定要关的。否则总会出问题的。Top

7 楼wshcdr(dd)回复于 2003-12-04 12:57:09 得分 0

还有一个问题  
  这个方法速度太慢  
   
  如果遇到一个有几十万条记录的文件就要花特别长的时间来处理  
   
  不知道大家有没有什么好的办法改进?Top

相关问题

  • 简单问题-----改写IO.SYS 文件
  • 超大型文件的改写问题
  • 用fstream改写文件时,如何写入结束符?
  • 软件限制时间和改写执行文件的问题
  • 如何高效的改写文件内容?
  • 请问如何直接改写文件的中间数据?
  • 我该如何在脚本中改写一个BAT文件呢?
  • 一段html代码改写到js文件里的问题
  • 请问这个boot.ini文件应该这么改写??
  • C#,怎样用程序改写Excel文件内容?

关键词

  • 文件
  • 循环
  • null
  • 写入
  • 读出
  • 打开
  • fopen
  • 一行
  • 问题
  • stream

得分解答快速导航

  • 帖主:wshcdr
  • hanyixin
  • zhangfjj
  • yg_xh
  • dislimit
  • saintshi

相关链接

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

广告也精彩

反馈

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