C语言中的二进制I/O:fread、fwrite
来源:互联网 发布:zh 那汀女装淘宝有吗 编辑:程序博客网 时间:2024/03/29 06:46
在链接:利用标准C库函数进行文件读写中介绍了使用getc或putc一次读写一个字符和使用fgets或fputs一次读写一行。
但是如果进行二进制文件I/O操作,我们更愿意一次读写一个完整的结构。如果使用getc或putc那么必须循环通过整个结构,每次循环处理一个字节会非常麻烦而且耗时。如果使用fputs和fgets,那么因为fputs在遇到NULL字节时就停止,而在结构中可能含有NULL字节,所以不能使用它实现°结构要求。类似的如果输入数据中含有NULL字节或换行符,则fgets也不能正确工作。可以使用下面两个函数执行二进制I/O操作。
1、fread
size_t fread( void* buffer, size_t size, size_t count, FILE* stream );
(1)参数
buffer:存放读的数据
size:读的结构的字节数。例如若读的数据类型为int,则size应为sizeof(int),若为结构struct{}item;则size应为sizeof(item);
count:最多读的数据数
(2)返回值
返回读的对象数。但是如果出错或者到达文件尾端,则此数字可以少于count;此时应该调用ferror或feof判断是哪一种情况。
2、fwritesize_t fwrite( const void* buffer, size_t size, size_t count, FILE* stream );(1)参数
buffer:要写的数组地址,注意为const的
(2)返回值
返回写的对象数,若返回值少于要求的count,则出错。
3、fread/fwrite使用 示例
(1)读或写一个二进制数组
例如;将一个浮点数组的第2~5个元素写至FILE *fp所指的文件上。
float data[10];if(fwrite(&data[2],sizeof(float),4,fp)!=4) cout<<"fwrite error"<<endl;(2)读或写一个结构
struct(short count;char name[10];}item;if(fwrite(&item,sizeof(item),1,fp)!=1) cout<<"fwrite error"<<endl;指定size为结构长度,count为1(要写的对象个数)
(3)
/* FREAD.C: This program opens a file named FREAD.OUT and * writes 25 characters to the file. It then tries to open * FREAD.OUT and read in 25 characters. If the attempt succeeds, * the program displays the number of actual items read. */#include <stdio.h>void main( void ){ FILE *stream; char list[30]; int i, numread, numwritten; /* Open file in text mode: */ if( (stream = fopen( "fread.out", "w+t" )) != NULL ) { for ( i = 0; i < 25; i++ ) list[i] = (char)('z' - i); /* Write 25 characters to stream */ numwritten = fwrite( list, sizeof( char ), 25, stream ); printf( "Wrote %d items\n", numwritten ); fclose( stream ); } else printf( "Problem opening the file\n" ); if( (stream = fopen( "fread.out", "r+t" )) != NULL ) { /* Attempt to read in 25 characters */ numread = fread( list, sizeof( char ), 25, stream ); printf( "Number of items read = %d\n", numread ); printf( "Contents of buffer = %.25s\n", list ); fclose( stream ); } else printf( "File could not be opened\n" );}输出结果:
Wrote 25 items
Number of items read = 25
Contents of buffer = zyxwvutsrqponmlkjihgfedcb
0 0
- C语言中的二进制I/O:fread、fwrite
- 问题点&二进制I/O函数fread(),fwrite()的使用
- 5.9 fread和fwrite函数-二进制I/O
- C语言中的fread和fwrite
- c语言中的 fopen fseek fread fwrite
- C语言的二进制IO函数fread()和fwrite()
- 数据块I/O:fread与fwrite
- C语言文件流操作的二进制读写和定位(fwrite、fread、fseek)
- C语言读写文件 -fopen、fread、fwrite
- C 语言中fread()和fwrite()用法
- C语言fwrite()函数和fread()函数
- I\O操作相关函数:fread,fwrite以及read,write
- 文件操作--标准I/O操作--fopen() fclose() fread() fwrite()
- I/O read()/write()/pread()/pwrite()/fread()/fwrite 等
- APUE之标准I/O fopen,freopen,fread,fwrite实例。
- I/O read()/write()/pread()/pwrite()/fread()/fwrite
- 标准I/O函数之fopen, fread, fwrite,fgetc,fputc
- C函数中的二进制I/O
- 如何解决HTTP通道大量消耗CPU问题
- android导出word文件
- 并查集详解
- WPF获得鼠标位置的方法
- 环境变量的配置
- C语言中的二进制I/O:fread、fwrite
- 当我们在使用Flask时,如何如记录日志
- 在2017年,如何将你的小米4刷上Windows 10 mobile?(后附大量图赏)
- phpstorm设置远程开发
- Java--StringBuffer
- 一笔画问题
- JAVA程序员学习之路
- 【杭电OJ】1873--看病要排队(优先队列)
- 07.debug