C语言实现二进制文件读写详解 在 C 语言中,实现二进制文件读写需要使用三个函数:fopen、fread 和 fwrite。下面是对这三个函数的详细说明。 一、fopen 函数 fopen 函数用于打开文件,以便进行读写操作。其函数原型为: ```c FILE *fopen(const char *path, const char *mode); ``` 其中,`path` 是要打开的文件路径和文件名,`mode` 是打开文件的模式。`mode` 可以是以下几种形式: * `r`:打开只读文件,该文件必须存在。 * `r+`:打开可读写的文件,该文件必须存在。 * `w`:打开只写文件,若文件存在则文件长度清为 0,即该文件内容会消失。若文件不存在则建立该文件。 * `w+`:打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 * `a`:以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。 * `a+`:以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 在 POSIX 系统中,包括 Linux,都会忽略 `b` 字符。如果要打开二进制文件,需要在 `mode` 字符串中加上 `b` 字符,如 `rb`、`wb` 等。 fopen 函数返回一个文件指针,如果打开文件失败,则返回 NULL,并将错误代码存储在 errno 中。 二、fread 函数 fread 函数用于从文件流中读取数据。其函数原型为: ```c size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream); ``` 其中,`ptr` 是要存储读取数据的指针,`size` 是每个元素的大小,`nmemb` 是要读取的元素个数,`stream` 是文件流指针。 fread 函数返回实际读取的元素个数。如果遇到文件结束或错误,返回值为 0。 三、fwrite 函数 fwrite 函数用于将数据写入文件流中。其函数原型为: ```c size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream); ``` 其中,`ptr` 是要写入的数据指针,`size` 是每个元素的大小,`nmemb` 是要写入的元素个数,`stream` 是文件流指针。 fwrite 函数返回实际写入的元素个数。如果遇到文件结束或错误,返回值为 0。 四、实例程序 下面是一个简单的拷贝程序: ```c #include <stdio.h> #include <stdlib.h> #define MAXLEN 1024 int main(int argc, char *argv[]) { if (argc < 3) { printf("usage: %s %s\n", argv[0], "infile outfile"); exit(1); } FILE *outfile, *infile; outfile = fopen(argv[2], "wb"); infile = fopen(argv[1], "rb"); unsigned char buf[MAXLEN]; if (outfile == NULL || infile == NULL) { printf("%s, %s\n", argv[1], "not exit"); exit(1); } int rc; while ((rc = fread(buf, sizeof(unsigned char), MAXLEN, infile)) != 0) { fwrite(buf, sizeof(unsigned char), rc, outfile); } fclose(infile); fclose(outfile); system("PAUSE"); return 0; } ``` 这个程序将文件 1 的内容直接拷贝到文件 2 中。注意 fread 的返回值,这个值需要在 fwrite 的时候使用。 C 语言中的二进制文件读写需要使用 fopen、fread 和 fwrite 三个函数。fopen 函数用于打开文件,fread 函数用于从文件流中读取数据,fwrite 函数用于将数据写入文件流中。
![cpp](https://img-home.csdnimg.cn/images/20210720083646.png)
![txt](https://img-home.csdnimg.cn/images/20210720083642.png)
![xz](https://img-home.csdnimg.cn/images/20210720083646.png)
![application/x-rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![text/x-c](https://img-home.csdnimg.cn/images/20210720083646.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![text/plain](https://img-home.csdnimg.cn/images/20210720083646.png)
![thumb](https://img-home.csdnimg.cn/images/20210720083646.png)
![](https://csdnimg.cn/release/download_crawler_static/12674482/bg1.jpg)
![avatar-default](https://csdnimg.cn/release/downloadcmsfe/public/img/lazyLogo2.1882d7f4.png)
![avatar](https://profile-avatar.csdnimg.cn/default.jpg!1)
- 粉丝: 8
- 资源: 919
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助
![voice](https://csdnimg.cn/release/downloadcmsfe/public/img/voice.245cc511.png)
![center-task](https://csdnimg.cn/release/downloadcmsfe/public/img/center-task.c2eda91a.png)
最新资源
![feedback](https://img-home.csdnimg.cn/images/20220527035711.png)
![feedback-tip](https://img-home.csdnimg.cn/images/20220527035111.png)
![dialog-icon](https://csdnimg.cn/release/downloadcmsfe/public/img/green-success.6a4acb44.png)