首页技术fwrite怎么读,peel怎么读

fwrite怎么读,peel怎么读

编程之家2026-06-211116次浏览

大家好,今天小编来为大家解答以下的问题,关于fwrite怎么读,peel怎么读这个很多人还不知道,现在让我们一起来看看吧!

fwrite怎么读,peel怎么读

c语言文件操作fwrite和fread

fread是C语言标准为中的一个函数。它从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功或读到文件末尾返回 0。

fwrite是C语言标准库中的一个函数,指向文件写入一个数据块。示例如下:

//读取一个完整的文件

#include<stdio.h>

#include<stdlib.h>

intmain()

fwrite怎么读,peel怎么读

{

FILE*pFile;//文件指针

longlSize;//用于文件长度

char*buffer;//文件缓冲区指针

size_tresult;//返回值是读取的内容数量

pFile=fopen("myfile.bin","rb");

fwrite怎么读,peel怎么读

if(pFile==NULL){fputs("Fileerror",stderr);exit(1);}//如果文件错误,退出1

//获得文件大小

fseek(pFile,0,SEEK_END);//指针移到文件末位

lSize=ftell(pFile);//获得文件长度

rewind(pFile);//函数rewind()把文件指针移到由stream(流)指定的开始处,同时清除和流相关的错误和EOF标记

//为整个文件分配内存缓冲区

buffer=(char*)malloc(sizeof(char)*lSize);//分配缓冲区,按前面的lSize

if(buffer==NULL){fputs("Memoryerror",stderr);exit(2);}//内存分配错误,退出2

//该文件复制到缓冲区

result=fread(buffer,1,lSize,pFile);//返回值是读取的内容数量

if(result!=lSize){fputs("Readingerror",stderr);exit(3);}//返回值如果不和文件大小,读错误

//terminate//文件终止

fclose(pFile);

free(buffer);

return0;

}综合使用的例子。

#include<stdio.h>

intmain()

{

FILE*pFile;

floatbuffer[]={2.0,3.0,8.0};

pFile=fopen("myfile.bin","wb");//打开文件写操作

fwrite(buffer,1,sizeof(buffer),pFile);//把浮点数组写到文件myfile.bin

fclose(pFile);//关闭文件

floatread[3];

pFile=fopen("myfile.bin","rb");//重新打开文件读操作

fread(read,1,sizeof(read),pFile);//从文件中读数据

printf("%f\t%f\t%f

",read[0],read[1],read[2]);

fclose(pFile);//关闭文件

return0;

}

C语言fwrite怎么写入文件

C语言fwrite写入文件可以参考以下的代码:

//定义一个学生结构体

structStudent_type

{

charname[10];

intnum;

intage;

charaddr[30];

}stud[40];

inti;

FILE*fp;//定义一个文件指针fp

fp=fopen("stu.dat","wb");//以二进制可写方式打开stu.dat文件

//将40个学生的记录写入文件stu.dat中

for(i=0;i<40;i++)

fwrite(&stud[i],sizeof(structStudent_type),1,fp);

扩展资料:

fwrite函数用法

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);

返回值:返回实际写入的数据块数目

1、buffer:是一个指针,对fwrite来说,是要获取数据的地址

2、size:要写入内容的单字节数

3、count:要进行写入size字节的数据项的个数

4、stream:目标文件指针

5、返回实际写入的数据项个数count

说明:写入到文件的哪里与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。

fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE*fp)函数同步。

参考资料来源:百度百科-fwrite

fread大概只能读10k

错误原因:

你用文本方式打开了二进制文件

文本方式读取二进制数据,可能在文件结束之前将某段数据判定为文件末尾EOF,所以结束读取(举个例子,比如遇到 0x00 0x00 0xff 0xff,则文本方式方式的文件流,认为已经到文件末尾,不能读取)

你这个38016的文件,大概在10k左右有段数据和文件结束标志格式相同,文本方式读取到10k左右就认为文件结束了(真正的文本文件,结束标志可能在磁盘簇的剩余空间中)

所以第一种方式:

固定读取38016次,每次往新文件中写一个字节;前10k次能读取到内容, fread返回值是1,这样写过去的一字节就是读取的字节;后28k因为读取失败, fread返回值为0,这样temp的内容就不会被改写,仍然是最后一次成功读取的值,但因为是写次数固定,所以后28k就重复写过去;

后一种方式:

根据fread的返回值来判定文件结束,这是正确的方法;所以读取到10k后,返回值为0,表示无效,文件结束,所以只复制了10k内容

CFile只支持二进读写,所以你的结果是正确的( CFile用CFile::typeText格式会报错; CStdioFile才能文本读写)

用fopen返回的FILE,如果读取的时候没有加b(比如"r"),则默认的是文本格式;所以请用"rb"来读取二进制文件,用"wb"写二进制文件;当然如果只是复制文件的话,纯二进制读写没有问题

下面是楼主要的效果,是一个字节读写的

#include<stdio.h>

int main()

{

FILE*pFileS= fopen("s.rar","rb");

if(! pFileS)

return 1;

FILE*pFileD= fopen("d.rar","wb+");

unsigned char bTemp;

while( fread(&bTemp, sizeof(unsigned char), 1, pFileS))

fwrite(&bTemp, sizeof(unsigned char), 1, pFileD);

fclose( pFileS), fclose( pFileD);

return 0;

}

其实一个字节读写的话,用fgetc和fputc就可以了,当然还是得以二进制方式打开

另外单字节读写速度太慢;系统中复制文件都是整块读写的,设置缓冲大小

比如

#include<stdio.h>

int main()

{

FILE*pFileS= fopen("s.rar","rb");

if(! pFileS)

return 1;

FILE*pFileD= fopen("d.rar","wb");

unsigned char buffer[ 4* 1024 ];

int nRead;

while( nRead= fread( buffer, sizeof(unsigned char), sizeof(buffer), pFileS))

fwrite( buffer, sizeof(unsigned char), nRead, pFileD);

fclose( pFileS), fclose( pFileD);

return 0;

}

另外, fread单次读取的总字节数有限制,也就是说缓冲有上限;只能通过提高次数来读取大文件;在这方面,用API如ReadFile或者调用了这些API的封装类就好得多;当然,次数多对电脑来说不是问题呵呵

附:

至于文本方式不能完全读取,而二进制方式能的原因-

文本方式读取文件,最主要的用处是一次读取一整句(以换行符'\n',即二进制的换行标志"\r\n"结束),方便用于特殊用处ReadString、fscanf(...,"%s",...)之类,每次读取的内容长度是不定的;而二进制读取方式Read、fread等,都是读取固定长度

所以文本方式读取对EOF的判定,是一个文件尾结束标志,如果是文本文件,则这个文件尾肯定不会出现在文件内容中(因为是不可打印字符构成的结束标志,人可读的文本文件不会包括它),这样以结束标志为文件尾则是可以的;二进制文件内容可以是任意字节,如果把它当文本文件来读,以文件尾为结束,当然可能出现把文件内容判定为文件尾的情况;

二进制读取方式由于每次读取固定字节,所以只需要用总文件长度(这个数值是系统管理的数值,不是计算得出来的)减去每次读取的长度(或根据Seek的位置计算长度),就可以知道是否到文件尾,不需要定义结束标志;所以用二进制方式打开任何文件都是合理的

OK,本文到此结束,希望对大家有所帮助。

activex控件安装不了?下载了控件但还是说没安装AI购物年终派对?蛋仔派对的ai世界有哪些新功能