fread读取文件(二进制文件)

本文详细介绍了C语言中的fread()函数,包括其原型、返回值的意义以及如何使用该函数来高效地读取二进制文件。通过示例程序展示了如何按1024字节分段读取文件,并利用feof()函数判断是否到达文件末尾。

 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[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;
}

 

转载于:https://www.cnblogs.com/bobojiang/p/7241061.html

### MATLAB 中 `fread` 函数读取二进制文件 在 MATLAB 中,`fread` 是用于从文件读取二进制数据的核心函数之一。它能够按照指定的数据类型和尺寸读取文件内容并将其存储到变量中[^2]。 #### 使用 `fread` 的基本流程 以下是使用 `fread` 读取二进制文件的一个典型示例: 1. **打开文件** 使用 `fopen` 函数以只读模式 (`'r'`) 或二进制只读模式 (`'rb'`) 打开目标文件。返回的文件标识符(file ID)将作为后续操作的基础。 ```matlab fid = fopen('example.bin', 'rb'); ``` 2. **读取数据** 调用 `fread` 函数读取文件中的数据。可以通过参数控制读取的数量、形状以及数据类型的解释方式。例如,假设我们要读取一个大小为 `[m, n]` 的矩阵,并且其数据类型为双精度浮点数 `'double'`: ```matlab data = fread(fid, [m, n], 'double'); ``` 如果只需要读取固定数量的元素,则可以省略矩阵维度参数: ```matlab data = fread(fid, count, 'uint8'); % 假设每字节作为一个无符号整数 ``` 3. **关闭文件** 完成读取后务必调用 `fclose` 来释放资源。 ```matlab fclose(fid); ``` 完整的代码如下所示: ```matlab % 打开二进制文件 fid = fopen('binary_file.bin', 'rb'); % 检查文件是否成功打开 if fid == -1 error('无法打开文件!'); end % 读取数据 (假定数据是以 double 类型存储的 m×n 矩阵) data = fread(fid, [m, n], 'double'); % 关闭文件 fclose(fid); % 显示读取的结果 disp(data); ``` 上述代码片段展示了如何通过 `fread` 将二进制文件的内容加载到内存中,并转换为目标数据结构[^5]。 --- #### 特殊情况处理 如果二进制文件的格式复杂或者包含混合数据类型,可能需要额外设置选项来调整行为。例如,当遇到不匹配的目标缓冲区大小时,可以选择跳过多余的部分或截断不足部分。 - 设置跳过的字节数量:`fseek(fid, offset, origin)` 可以前移或回退文件指针位置。 - 自定义缺失值替换策略:利用 `'SkipBytes'` 和 `'AnsiMode'` 参数优化兼容性。 更多细节可查阅官方文档获取支持的功能列表[^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值