fread()是c库函数,利于移植,使用缓存,效率较read()高。

原型:

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

要注意的是它的返回值,如果读取到了文件尾,返回值小于count,可以使用feof()函数检测出来,返回真。

PS:返回值代表的是某种类型的size的个数。

下面程序按照1024k(一次大小为sizeof(char))一次读取二进制文件。

include <stdio.h>
#include <string.h>#define BUFFSIZE 1024int main(int argc, char **argv){char buff[BUFFSIZE];FILE *fd = fopen (argv[1], "rb");int count, errno=0;bzero (buff, BUFFSIZE);while (!feof (fd)){count = fread (buff, sizeof (char), BUFFSIZE, fd);int n = feof (fd);printf ("%d,%d\n", count, n);printf ("%s\n",strerror (errno));}return 0;
}

fread_s读取流的数据。 fread 此版本的具有安全增强功能,如 CRT中的安全功能所述。

size_t fread_s( void *buffer,size_t bufferSize,size_t elementSize,size_t count,FILE *stream
);

参数
buffer

数据的存储位置。

bufferSize

目标缓冲区的大小(以字节为单位)。

elementSize

写入字节的项的大小。

count

要读取的项目最大数。

stream

为 FILE 结构的指针。

返回值
fread_s 返回读取到缓冲区,比 count 会比(全部)的项数,如果读取错误或文件结尾遇到,在 count 达到之前。 使用 feof 或 ferror 功能与一个文件关闭条件区分错误。 如果 size 或 count 为0,fread_s 返回0,并且缓冲区内容保持不变。 如果 stream 或 buffer 是null指针,fread_s 调用无效参数处理程序,如 参数验证所述。 如果执行允许继续,此功能设置 errno 到 EINVAL 并返回0。

有关错误代码的更多信息,请参见 _doserrno、errno、_sys_errlist和_sys_nerr。

备注
fread_s 函数在 buffer读取到 elementSize 字节 count 项从输入 stream 并存储它们。 与 stream 的文件指针(如果有)的字节数增加实际读取的。 如果给定流在文本模式中打开,支持返回换行符对用单个换行符替换。 替换对文件指针或返回值的效果。 ,如果发生错误,文件指针位置是不确定的。 一个部分读取的项的值无法确定的。

此功能锁定其他线程。 如果需要非固定版本,请使用 _fread_nolock。

要求

功能

必需的标头

fread_s

<stdio.h>

示例

// crt_fread_s.c
// Command line: cl /EHsc /nologo /W4 crt_fread_s.c
//
// This program opens a file that's named FREAD.OUT and
// writes characters to the file. It then tries to open
// FREAD.OUT and read in characters by using fread_s. If the attempt succeeds,
// the program displays the number of actual items read.

#include <stdio.h>#define BUFFERSIZE 30
#define DATASIZE 22
#define ELEMENTCOUNT 2
#define ELEMENTSIZE (DATASIZE/ELEMENTCOUNT)
#define FILENAME "FREAD.OUT"int main( void )
{FILE *stream;char list[30];int  i, numread, numwritten;for ( i = 0; i < DATASIZE; i++ )list[i] = (char)('z' - i);list[DATASIZE] = '\0'; // terminal null so we can print it// Open file in text mode:if( fopen_s( &stream, FILENAME, "w+t" ) == 0 ){// Write DATASIZE characters to stream printf( "Contents of buffer before write/read:\n\t%s\n\n", list );numwritten = fwrite( list, sizeof( char ), DATASIZE, stream );printf( "Wrote %d items\n\n", numwritten );fclose( stream );} else {printf( "Problem opening the file\n" );return -1;}if( fopen_s( &stream, FILENAME, "r+t" ) == 0 )   {// Attempt to read in characters in 2 blocks of 11numread = fread_s( list, BUFFERSIZE, ELEMENTSIZE, ELEMENTCOUNT, stream );printf( "Number of %d-byte elements read = %d\n\n", ELEMENTSIZE, numread );printf( "Contents of buffer after write/read:\n\t%s\n", list );fclose( stream );} else {printf( "File could not be opened\n" );return -1;}
}

fread与fread_s读取文件(二进制文件)相关推荐

  1. php获取src,PHP读取文件

    本文概述 PHP提供了各种功能来从文件读取数据.有多种功能允许你读取所有文件数据, 逐行读取数据以及逐字符读取数据. 下面提供了可用的PHP文件读取功能. fread() fgets() fgetc( ...

  2. php读出文件,PHP读取文件

    PHP提供了从文件读取数据的各种功能(函数). 可使用不同的函数来读取所有文件数据,逐行读取数据和字符读取数据. 下面给出了可用的几种PHP文件读取函数. fread() fgets() fgetc( ...

  3. linux下 c语言 用write open二进制写文件,Linux下用C语言fopen、fread和fwrite函数对二进制文件的操作-Go语言中文社区...

    一.前言 在做一个镜头的初始化操作,需要加载一个648*522像素大小的文件,厂商提供的是一个excel表,如果要加载数据,可用加载txt文本的方式,我选用二进制方式加载文件:大家都知道电脑真正执行的 ...

  4. php 读取文件大小限制,PHP fread():读取文件(任意长度)

    PHP 中的 fread() 函数可以在打开的文件中读取指定长度的数据,也可以安全用于二进制文件.在区分二进制文件和文本文件的系统上(如 Windows)打开文件时,fread() 函数的 mode ...

  5. fwrite和fread函数的用法小结(怎么样以二进制形式保存和读取文件)

    该文非博主原创,转载于http://blog.csdn.net/sky_qing/article/details/12783045 fwrite和fread是以记录为单位的I/O函数,fread和fw ...

  6. python open写入_Python3 open() 函数详解 读取文件写入文件追加文件二进制文件

    Python3 open() 函数详解 读取文件写入文件追加文件二进制文件 open()函数的主要作用是打开文件并返回相应文件对象,使用文件对象可以对当前文件进行读取.写入.追加等操作,默认情况下&q ...

  7. c语言读取文件函数,C语言文件操作详细分析:读取文件(fread函数使用)

    C语言文件操作详细分析:读取文件(fread函数使用) 这里详细介绍了C语言读取文件的函数fread的使用说明,参照了MSDN的说明,同时加入自己的经验让大家学的更加明白. C语言读取文件函数frea ...

  8. php 读取文件fread,PHP: 读取文件 fgets 和 fread 的差异

    程序在写时, 何时要用 fgets? 何时要用 fread? 主要的差异在哪边? 以下就用简单的范例来说明~ 先创建一个文件: /tmp/readfile.txt, 内容如下: abcdefg 123 ...

  9. python文本文件不能用二进制文件方式读入_如何使用python函数以二进制形式读取文件?...

    虽然读取文件的方式各种各样,但是通过二进制,还是头一次,实现过过程并不难,我们需要将文件先做好封存,以函数的形式,保存下来,然后直接导入进行使用,这样就可以读取文件,因为直接二进制读取是不现实的,只能 ...

最新文章

  1. gatsby_如何使用Gatsby.js来获取内容
  2. idea设置自动编译
  3. Windows开启WMI时一些总结
  4. Win32 串口编程(二)
  5. java静态局部变量_java中成员变量,局部变量,静态变量的辨析
  6. R语言观察日志(part16)--Google‘s R Style Guide
  7. 我感到惭愧不已的飞鸽传书
  8. 得推家政派单系统源码 v1.0
  9. [Ext JS 4] MVC 应用程序框架
  10. 《Linux编程》上机作业 ·002【Linux常用工具GCC、GDB、Make】
  11. CRFsuite 学习: CoNLL 2000 shared task
  12. Centos 查看系统硬件信息
  13. 拓端tecdat|matlab递归神经网络RNN实现:桨距控制控制风力发电机组研究
  14. 泛微E9升级KB包方法
  15. 丁腈橡胶自然老化时间_影响丁腈橡胶老化的因素研究
  16. Smss.exe进程分析
  17. ANSYS渡槽槽身动水压力的施加(1)——矩形渡槽
  18. python 电动车问题
  19. vue实现俄罗斯方块初级版本
  20. jira中新增模块详解

热门文章

  1. Failed to find Build Tools revision 28.0.3
  2. python如何画出多个独立的图片_python使用matplotlib:subplot绘制多个子图的示例
  3. composer全局 linux_Linux下全局安装composer方法
  4. vue封装websocket_Vue中使用websocket
  5. mysql查询单个员工信息_PHP+MySQL实现模糊查询员工信息功能示例
  6. 华为鸿蒙mate,华为MatePad Pro发布亮相!华为首款鸿蒙平板全新体验!
  7. java 判断数字_如何在java中判断一个字符串是否是数字
  8. 禁止更改计算机名_PiNetwork如何更改名字教程
  9. IDEA将maven项目复制成一个新的框架/项目
  10. 北大生物信息学公开课学习(1)