fopen()函数:

1.作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。

2.函数原型:

FILE * fopen(const char * path,const char * mode);-- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt"-- mode: 文件打开方式,例如:"r" 以只读方式打开文件,该文件必须存在。"w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。"w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。"a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)"a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留)"wb" 只写打开或新建一个二进制文件,只允许写数据。"wb+" 读写打开或建立一个二进制文件,允许读和写。"ab" 追加打开一个二进制文件,并在文件末尾写数据。"ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。   --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。

fwrite()函数:

1.作用:在C语言中fwrite()函数常用语将一块内存区域中的数据写入到本地文本。

2.函数原型:

size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);-- buffer:指向数据块的指针-- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)-- count:数据个数-- stream:文件指针

注意:返回值随着调用格式的不同而不同:

(1) 调用格式:fwrite(buf,sizeof(buf),1,fp);

成功写入返回值为1(即count)

(2)调用格式:fwrite(buf,1,sizeof(buf),fp);

成功写入则返回实际写入的数据个数(单位为Byte)

3. 注意事项:

    写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指针都会指向下一个待写或者读数据位置的指针。

示例说明:

代码1:下面代码可将1024个字(int)写入到文本文件,fwrite的调用中,size是sizeof(int),count是DATA_SIZE

#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024int main()
{unsigned int *dataPtr = NULL;dataPtr = (unsigned int *)malloc(sizeof(int)*DATA_SIZE);for(unsigned int i=0;i<DATA_SIZE;i++){dataPtr[i] = i; //初始化缓存区}FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","w");fwrite(dataPtr,sizeof(int),DATA_SIZE,fp);fclose(fp);free(dataPtr);system("pause");return 0;
}

代码2:下面代码也可将1024个字写到文本中,虽然fwrite函数中,size是1,但count是DATA_SIZE*sizeof(int)。与代码1实现的结果一样。

// datasave.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024int main()
{unsigned int *dataPtr = NULL;dataPtr = (unsigned int *)malloc(sizeof(int)*DATA_SIZE);for(unsigned int i=0;i<DATA_SIZE;i++){dataPtr[i] = i; //初始化缓存区}FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","ab+");fwrite(dataPtr,1,DATA_SIZE*sizeof(unsigned int),fp);
<pre name="code" class="cpp">       fclose(fp);
<pre name="code" class="cpp">       free(dataPtr);

system("pause");    return 0;}
代码3:下面的代码将4096个char数据写到文本,写入的数据中,最大值为255,与上面代码1、2有区别,因为缓存区数据类型不同

// datasave.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024int main()
{unsigned char *dataPtr = NULL;dataPtr = (unsigned char *)malloc(sizeof(int)*DATA_SIZE); //申请的区域是4096个char,即1024个字的区域for(unsigned int i=0;i<DATA_SIZE;i++){dataPtr[i] = i; //初始化缓存区}FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","ab+");fwrite(dataPtr,sizeof(char),DATA_SIZE*sizeof(int),fp);fclose(fp);      free(dataPtr);system("pause");return 0;
}

代码4:用malloc函数申请区域时是申请的一片char*区域,通过强制类型转换后可装unsigned int 数据。

// datasave.cpp : 定义控制台应用程序的入口点。
//#include "stdafx.h"
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <stdlib.h>
#define DATA_SIZE 1024int main()
{unsigned char *dataPtr = NULL;unsigned int *Ptr = NULL;dataPtr = (unsigned char *)malloc(sizeof(int)*DATA_SIZE);Ptr = (unsigned int *) dataPtr;for(unsigned int i=0;i<DATA_SIZE;i++){Ptr[i] = i; }FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","ab+");fwrite(Ptr,sizeof(unsigned int),DATA_SIZE,fp);fclose(fp);free(dataPtr);system("pause");return 0;
}

fread()函数:
1. 作用:从一个文件流中读取数据
2. 函数原型如下:

 size_t fread(void *buffer, size_t size, size_t count, FILE *stream);-- buffer:指向数据块的指针-- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4)-- count:数据个数-- stream:文件指针

注意:返回值随着调用格式的不同而不同:
(1) 调用格式:fread(buf,sizeof(buf),1,fp);
读取成功时:当读取的数据量正好是sizeof(buf)个Byte时,返回值为1(即count)
                       否则返回值为0(读取数据量小于sizeof(buf))
(2)调用格式:fread(buf,1,sizeof(buf),fp);
读取成功返回值为实际读回的数据个数(单位为Byte)

代码参考:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main(int argc, char *argv[])
{FILE *filp = NULL;char fileDir[] = "/home/yangzhiyuan/Documents/test.txt"; char dataPtr[] = "Helloworld";printf("sizeof(dataPtr) = %ld\n",sizeof(dataPtr));filp = fopen(fileDir,"w+");  /* 可读可写,不存在则创建 */int writeCnt = fwrite(dataPtr,sizeof(dataPtr),1,filp);  /* 返回值为1 *///int writeCnt = fwrite(dataPtr,1,sizeof(dataPtr),filp);  /* 返回值为11 */printf("writeCnt = %d\n",writeCnt);fclose(filp);FILE *fp = NULL;fp = fopen(fileDir,"r");char buffer[256];int readCnt = fread(buffer,sizeof(buffer),1,fp);  /* 返回值为0 *///int readCnt = fread(buffer,1,sizeof(buffer),fp);  /* 返回值为11 */   printf("readCnt = %d\n",readCnt);fclose(fp);printf("%s\n",buffer);exit(0);
}

注意:本例代码中定义了两个FILE变量,一个用于write,一个用于read,写完后要close掉,然后再打开,然后读。如果直接使用一个FILE变量,会出错!

fopen()、fwrite()、fread()函数使用说明与示例相关推荐

  1. open,write,read与fopen,fwrite,fread的区别

    open:系统调用,返回的是文件描述符,即文件句柄,是文件在文件描述副表里的索引. fopen:C语言库函数,返回的是一个指向文件结构的指针.fopen是ANSI C标准中的C语言库函数,在不同的操作 ...

  2. C语言 fopen和fread函数解析

    fopen函数 fopen()函数可以用来打开文件,写法如下,第一个参数是文件名路径,第二个参数的是打开文件的方式: FILE *fp1: fp1 = fopen("file a" ...

  3. mmap函数使用说明以及示例

    使用 mmap 时务必注意以下事项: 1.创建映射区的过程中,隐含着一次对映射文件的读操作. 2. 当 MAP_SHARED 时,要求:映射区的权限应 <= 文件打开的权限(出于对映射区的保护) ...

  4. matlab fopen fwrite,fopen fwrite

    C#中类似C++fopen.fclose.fwrite的函数 用C#改写一段C++代码,C++中有fopen.fclose.fwrite,C#相应的用什么方fopen, fclose, fwrite是 ...

  5. C++文件读写函数之——fopen、fread和fwrite、fgetc和fputc、fgets和fputs、ftellf和fseek、rewind...

    由于最近经常使用到c语言中的读写文件,所以在此总结以下,方便以后查找. 在c中,文件操作都是由库函数来实现的,主要是分为读和写两种操作,以下详细讲解以下所有有关文件操作的邯郸乎的用法: //C++写入 ...

  6. 【C 语言】文件操作 ( 按照内存块的方式读写文件 | fread 函数 | fwrite 函数 )

    文章目录 一.fwrite 函数 二.fread 函数 三.按照内存块的方式写文件 四.按照内存块的方式读文件 一.fwrite 函数 fwrite 函数 : 将 const void *ptr 指针 ...

  7. fwrite函数,fread函数和fgets函数详解以及使用方法

    c/c++文件处理函数 1. fgets函数 函数原型 char *fgets(char *s, int size, FILE *stream); 参数解释: s 代表要保存到的内存空间的首地址,可以 ...

  8. fwrite函数的用法示例_C语言中的fwrite()函数(带有示例)

    fwrite函数的用法示例 C中的fwrite()函数 (fwrite() function in C) Prototype: 原型: size_t fwrite(void *buffer, size ...

  9. fread函数和fwrite函数,read,write

    fread函数和fwrite函数 1.函数功能 用来读写一个数据块. 2.一般调用形式 fread(buffer,size,count,fp); fwrite(buffer,size,count,fp ...

最新文章

  1. Android时钟的widget
  2. Java交换两个Integer-一道无聊的题的思考
  3. git cherry-pick改写提交
  4. JavaScript —— this、闭包、原型、异步
  5. Python淘汰倒计时!这个新一代可视化神器,阿里、华为都用疯了?
  6. CAM350 10.7 中文界面
  7. java多线程---比较全的
  8. 【渝粤教育】电大中专幼儿园课程论 (7)作业 题库
  9. Silverlight 异步单元测试
  10. 鸿蒙系统跟腾讯合作,要和华为鸿蒙竞争?腾讯系统开源了,仅1.8K,支持众多芯片 - 区块网...
  11. 二分图匹配的判断+p1322+二分图最大匹配+tyvj1035
  12. 在html或asp.net中使用FlexPaper
  13. 全网最全Linux命令总结!!(史上最全,建议收藏)
  14. 2020-10-22
  15. HTML5网页设计制作基础大二dreamweaver作业、使用HTML+CSS技术制作博客网站(5个页面)...
  16. three.js法线贴图与凹凸贴图的对比
  17. 图机器学习——5.9 图神经网络:图的增广
  18. 「数字化转型」数字化转型的12个步骤
  19. [高考真题]2012年普通高等学校招生全国统一考试 英语(四川卷)
  20. C3P0的三种使用方法

热门文章

  1. oracle解锁账户以及修改密码
  2. 明明有空单元格,Ctrl+G定位空值报未找到单元格
  3. tls协议 android 证书,Android TLS连接和自签名证书
  4. 如何配置springboot (2)-如何打jar包 ---彻骨寒风的博客
  5. 【16.10更新】神器再现!百度云网盘批量高速下载 Chrome插件+IDM
  6. tplink无线网卡的linux,Ubuntu 13.10 使用 TP-LINK TL-WN725N v2.0
  7. 使用Python对excel中的数据进行处理
  8. OpenVpnCentos8部署
  9. 嵌入式开发和c/c++编程经验总结
  10. 考研政治(一)马克思原理