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 1024 int main(int argc, char **argv){ char buff[BUFFSIZE];
FILE *fd = fopen (argv[], "rb");
int count, errno=; 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 ;
}

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[];
int i, numread, numwritten; for ( i = ; 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" ) == )
{
// 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 -;
} if( fopen_s( &stream, FILENAME, "r+t" ) == ) {
// Attempt to read in characters in 2 blocks of 11
numread = 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 -;
}
}

fread与fread_s读取文件(二进制文件)的更多相关文章

  1. PHP读取文件函数fread,fgets,fgetc,file_get_contents和file函数的使用总结

    fread().fgets().fgetc().file_get_contents() 与 file() 函数用于从文件中读取内容. 1.fread() fread()函数用于读取文件(可安全用于二进 ...

  2. php学习笔记--高级教程--读取文件、创建文件、写入文件

    打开文件:fopen:fopen(filename,mode);//fopen("test.txt","r"): 打开模式:r  仅仅读方式打开,将文件指针指向 ...

  3. php中读取文件内容的几种方法

    1.fread string fread ( int $handle , int $length ) fread() 从 handle 指向的文件中读取最多 length 个字节.该函数在读取完最多 ...

  4. Matlab如何循环读取文件

    循环读取图片第一种方法①List =dir('*.jpg'); %如需其它图片格式支持,可以自己[重载dir()]函数,实现查找所有图片文件的功能,%如果图片是其它路径,可以用 ["路径&q ...

  5. PHP读取文件的多种方法

    1.传统的方法 fopen, fclose feof:file.end of file 例子: $file_handle = fopen("c:\\myfile.txt", &qu ...

  6. PHP读取文件的常见方法

    整理了一下PHP中读取文件的几个方法,方便以后查阅. 1.fread string fread ( int $handle , int $length ) fread() 从 handle 指向的文件 ...

  7. PHP中读取文件的几个方法

    整理了一下PHP中读取文件的几个方法,方便以后查阅. 1.fread string fread ( int $handle , int $length ) fread() 从 handle 指向的文件 ...

  8. php中读取文件内容的几种方法。(file_get_contents:将文件内容读入一个字符串)

    php中读取文件内容的几种方法.(file_get_contents:将文件内容读入一个字符串) 一.总结 php中读取文件内容的几种方法(file_get_contents:将文件内容读入一个字符串 ...

  9. python用二进制读取文件

    python二进制读取文件 很多时候,都需要用到二进制读取文件.毕竟很多信息不是以文本的形式存储.例如:图片,音乐等等.这些东西都是有规则的二进制文件. 在python中,二进制读取采用rb的方式. ...

随机推荐

  1. yum卸载

    完全卸载依赖 -- 正常安装 yum install sl -- 列出操作 yum history list sl -- 根据显示install操作的id进行删除 yum history undo { ...

  2. Tomcat配置连接c3p0连接池

    一.Tomcat配置JNDI资源 JNDI(Java Naming and Directory Interface),Java 命名和目录接口. JNDI的作用就是:在服务器上配置资源,然后通过统一的 ...

  3. Postman-关于设置

    用Postman的时候由于没有中文版,所以想设置的完全符合自己的使用习惯不太容易,于是找了下关于设置的使用并转载记录一下,链接:https://www.jianshu.com/p/518ab60ebe ...

  4. ssm 注解@ResponseBody 返回json 乱码问题

    方法一:在@RequestMapping上加入 produces方法 @RequestMapping(value = "/upload.do",method = RequestMe ...

  5. 【转】c++ http下载文件

    #include <afx.h> #include <afxinet.h> #define RECVPACK_SIZE 2048 bool DownloadSaveFiles( ...

  6. 比较和排序(IComparable和IComparer以及它们的泛型实现)(转)

    C#笔记25:比较和排序(IComparable和IComparer以及它们的泛型实现) 本文摘要: 1:比较和排序的概念: 2:IComparable和IComparer: 3:IComparabl ...

  7. 简单的3proxy配置

    timeouts 1 5 30 60 180 1800 15 60log "D:\Program Files\3proxy-0.6.1-x64\cfg\3proxy.log" Dl ...

  8. 创建基于 AFS 的 Docker 容器卷

    标准的 Docker 容器卷一般是位于 Docker 主机上的一个本地目录.在这样的配置下,容器必须依赖于一台特定的主机,因此使得容器的迁移和扩展变得困难.通过使用容器卷插件,能让容器访问独立于主机的 ...

  9. 大数据实时计算工程师/Hadoop工程师/数据分析师职业路线图

    http://edu.51cto.com/roadmap/view/id-29.html http://my.oschina.net/infiniteSpace/blog/308401 大数据实时计算 ...

  10. Python初学者第十四天 三元运算及文件处理2

    14day 1.三元运算: 又称三目运算,是对简单的条件语句的简写 如简单条件语句: if a > b: n = a else: n = b print(n) 三目运算语句: n = a if ...