为什么写入的文件里没内容
编号: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);
此问题由李海回答。
| |
|
|
| |
|
|