(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。
(2)size:要写的字节数;
(3)count:要进行写多少个size字节的数据项;
(4)fp:文件型指针。
我有个问题:如果使用fwrite将buffer中的数据写进一个文件1.txt,buffer中的数据大小为17字节,size为5字节,count为4,这样可将buffer中的数据全部写进1.txt中,那么它的返回值是多少?也就是每次写5字节,调用一次fwrite函数能写4次,最后一次并不能写满5个字节。
我不知道我的问题说明白了没有,也就是设size=5,count=4,那么当buffer=17字节与buffer=20字节的情况下的返回值是否相同?
why not test it yourself?
我试过了,其实不管怎样,它返回值总是等于count的,也就是如果字符数组大小是17的话,那么就除了将该字符数组写进文件,还将它后面的3了字符也写进文件。
其实我真正想问的是如果一个未知大小的文件1.txt,我怎么用fread将它中的数据读进buffer中,然后再用fwrite将buffer中的数据写进2.txt,这样完成了文件拷贝,读写函数中的size和count怎么设置,怎样才能判断fread将文件1.txt全写进buffer中?
其实我有个一直没有看到解释的疑问,就是为什么用size和count同时来控制呢?为啥不直接用size呢?
再具体一些吧,我要将一个图片文件1.jpg进行拷贝,用fwrite和fread怎么实现啊?也就是其中的size和count怎么分配,还有怎么判断读到文件尾了?我自己编写了很简陋的程序:1.jpg文件很小,不到200字节,有哪个高手帮我改进一下。
#include<stdlib.h>
#include<stdio.h>
#include<iostream.h>
#include<string.h>
void main()
{
char buffer[1024]="";
FILE *fp1;
FILE *fp2;
if((fp1=fopen("1.gif","r"))==NULL)
{
printf("cannot open file1\n");
exit(0);
}
int nr=fread(buffer,1,1024,fp1);
printf("%d\n",nr);
if((fp2=fopen("2.gif","w+"))==NULL)
{
printf("cannot open file2\n");
exit(0);
}
int nw=fwrite(buffer,1,1024,fp2);
fclose(fp1);
fclose(fp2);
return;
}
while ((nr = fread(buffer, 1024, 1, fp1)) == 1)
if (1 == nr)
fwrite(buffer, 1024, 1, fp2);
会员注册
会员登录
个人空间