热情软件屋

 

为什么写入的文件里没内容


编号:QA003754
建立日期: 2001年1月10日 最后修改日期:2001年1月10日
所属类别:

李军:
    操作系统: 98/nt
    编程工具: c
    问题: 我想用c做一个程序实现以下功能:
    1.能打开c盘下的一个文件lj1.txt,lj1.txt里原来的内容为:1234+++lj2.txt
    2.用程序实现读出+++后面的内容做为文件名建立一个新文件。即建立lj2.txt文件,新建的文件内容为lj1.txt里+++前面的内容,即1234(也是用程序读出lj1.txt里+++前面的内容)
    我是这样实现的:但不成功,新建文件里没内容(请指点一下:)
    #include <stdio.h>
    #include <string.h>
    
    void main()
    {
     char buf1[120];
     char buf2[120];
     char buf3[120];
     FILE* zk1=NULL;
     FILE* zk2=NULL;
     FILE* zk3=NULL;
     char* z1=NULL;
     char* z2=NULL;
     char* z3=NULL;
     int a1=0;
     int a2=0;
     int a3=0;
     zk1=fopen("c:\\zk1.txt","r");
    
     fseek(zk1,0,SEEK_END);
     a1=ftell(zk1);
     fseek(zk1,0,SEEK_SET);
     memset(buf1,'\0',sizeof(buf1));
     memset(buf2,'\0',sizeof(buf2));
     memset(buf3,'\0',sizeof(buf3));
     fread(buf1,a1,1,zk1);//buf1是将要放文件内容的空间
     //a1是文件内容的长度
     //1为一次
     //zk1为文件被读内容的起始点指针
     z3=strstr(buf1,"+++");//查找+++所在的位置
     a2=ftell(zk1);//计算从这里到文件头的长度
     printf("%d\n",a2);
     strcpy(buf3,z3+3);//把+++后面的文件名取出来
     printf("%s\n",buf3);
     zk3=fopen((char*)buf3,"w+");//用这个文件名建立新文件
     z3=strstr(buf1,"+++");//再次查找+++所在的位置
     fseek(zk1,0,SEEK_SET);
     fwrite(buf3,a2,1,zk3);
     printf("%s\n",buf1);
     zk2=fopen("f:\\zk3.txt","w+");
     fclose(zk2);
     fwrite(buf1,sizeof(buf1),1,zk2);
    }
    水平: 刚入门

回答:

    从你的这段代码可以看出,你编程的思路很混乱,这是初学者常见的问题,你应该先尝试把思路理清。你的代码中无用的代码很多,例如最后已经关闭了zk2,怎么又往其中写内容呢?当你已经把文件的所有内容都读入了内存,下面就应该进行字符串的操作了,为什么又调用ftell、fseek呢?它们有什么用处呢?首先把没有用的代码都删除,整理为下面这样:
    void main()
    {
     char buf1[120];
     char buf2[120];
     char buf3[120];
     FILE* zk1=NULL;
     FILE* zk3=NULL;
     char* z1=NULL;
     char* z2=NULL;
     char* z3=NULL;
     int a1=0;
     int a2=0;
     int a3=0;
     zk1=fopen("c:\\zk1.txt","r");
    
     fseek(zk1,0,SEEK_END);
     a1=ftell(zk1);
     fseek(zk1,0,SEEK_SET);
     memset(buf1,'\0',sizeof(buf1));
     memset(buf2,'\0',sizeof(buf2));
     memset(buf3,'\0',sizeof(buf3));
     fread(buf1,a1,1,zk1);//buf1是将要放文件内容的空间
     //a1是文件内容的长度
     //1为一次
     //zk1为文件被读内容的起始点指针
     fclose(zk1);
    // 至此读zk1文件结束,下面开始字符串操作
     z3=strstr(buf1,"+++");//查找+++所在的位置
     printf("%d\n",a2);
     strcpy(buf3,z3+3);//把+++后面的文件名取出来
     printf("%s\n",buf3);
     zk3=fopen((char*)buf3,"w+");//用这个文件名建立新文件
     z3=strstr(buf1,"+++");//再次查找+++所在的位置
     fwrite(buf3,a2,1,zk3);
     printf("%s\n",buf1);
     fclose(zk3);
    }
    你的文件正确,而写文件错误,而写文件的语句只有一个:
     fwrite(buf3,a2,1,zk3);
    问题肯定出在这里。此时buf3应该是什么呢?很显然是+++后面的文件名。你把buf3写入文件显然不可能得到正确的结果,此处应该是buf1。
    下面的问题是应该写多少字节呢?z3指向+++,所以应该写入buf3和z3之间的部分。应该改为:
     fwrite(buf1,z3-buf3,1,zk3);

此问题由李海回答。

 
把这个问题推荐给朋友
   
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio