FILE文件流用于对文件的快速操作,主要的操作函数有fopen、fseek、fread、fclose,在对文件结构比较清楚时使用这几个函数会比较快捷的得到文件中具体位置的数据,提取对我们有用的信息,满足编程中的需要。以下分别进行说明,还有他们使用时的注意事项

fopen

函数原型    FILE * fopen(const char *path,cost char *mode)

作用:打开一个文件,返回指向该文件的指针

参数说明:第一个参数为欲打开文件的文件路径及文件名,第二个参数表示对文件的打开方式

注:mode有以下值:

r:只读方式打开,文件必须存在

r+:可读写,必须存在

rb+:打开二进制文件,可以读写

rt+:打开文本文件,可读写

w:只写,文件存在则文件长度清0,文件不存在则建立该文件

w+:可读写,文件存在则文件长度清0,文件不存在则建立该文件

a:附加方式打开只写,不存在建立该文件,存在写入的数据加到文件尾,EOF符保留

a+:附加方式打开可读写,不存在建立该文件,存在写入的数据加到文件尾,EOF符不保留

wb:打开二进制文件,只写

wb+:打开或建立二进制文件,可读写

wt+:打开或建立文本文件,可读写

at+:打开文本文件,可读写,写的数据加在文本末尾

ab+:打开二进制文件,可读写,写的数据加在文件末尾

由mode字符可知,上述如r、w、a在其后都可以加一个b,表示以二进制形式打开文件

返回值:文件打开了,返回一个指向该打开文件的指针(FILE结构);文件打开失败,错误上存error code(错误代码)

注意:在fopen操作后要进行判断,是否文件打开,文件真正打开了才能进行后面的读或写操作,如有错误要进行错误处理

例:FILE *pfile=fopen(const char *filename,"rb");

打开文件流还有一个支持宽字符的函数,如下

FILE *_wfopen(const wchar_t *filename,const wchar_t *mode)

fread

函数原型:size_t fread(void* buff,size_t size,size_t count,FILE* stream)

作用:从文件中读入数据到指定的地址中

参数:第一个参数为接收数据的指针(buff),也即数据存储的地址

第二个参数为单个元素的大小,即由指针写入地址的数据大小,注意单位是字节

第三个参数为元素个数,即要读取的数据大小为size的元素个素

第四个参数为提供数据的文件指针,该指针指向文件内部数据

返回值:读取的总数据元素个数

例:

int  num,count;

int* pr=new int[num*count];

fread(pr, num*4, count, stream);   // stream为fopen中返回的FILE指针

要将数据写入pr中,必须为pr分配内存,一个int为4个字节,所以要x4

fseek

函数原型:int fseek(FILE *stream,long offset,int framewhere)

作用:重定位文件内部的指针

参数:第一个为文件指针,第二个是指针的偏移量,第三个是指针偏移起始位置

返回值:重定位成功返回0,否则返回非零值

需要注意的是该函数不是重定位文件指针,而是重定位文件内部的指针,让指向文件内部数据的指针移到文件中我们感兴趣的数据上,重定位主要是这个目的。

说明:执行成功,则stream指向以fromwhere为基准,偏移offset个字节的位置。执行失败(比方说offset偏移的位置超出了文件大小),则保留原来stream的位置不变

fclose

函数原型:int fclose(FILE *stream)

功能:关闭一个文件流,使用fclose就可以把缓冲区内最后剩余的数据输出到磁盘文件中,并释放文件指针和有关的缓冲区

熟练使用以上四个函数可以从文件中获取对我们有用的数据型,前提对于文件格式很了解,比如,对于一个DIB位图文件,就可以读取出他的文件中的头信息和像素点信息。

转自:http://www.cnblogs.com/Romi/archive/2012/02/29/2374769.html

转载于:https://www.cnblogs.com/zhangwuji/p/5347578.html

FILE文件流的中fopen、fread、fseek、fclose的使用相关推荐

  1. Java File文件流读取文件夹内的文件并替换文件内容

    Java File文件流读取文件夹内的文件并替换文件内容 一.前言 二.代码 三.运行结果 一.前言 批量读取文件夹内的文件,并替换各个文件的内容 二.代码 新建一个普通 Java 项目就可以,创建文 ...

  2. Response 输出文件流过程中的等待效果

    大家在写程序过程中应该会遇到这样的问题,就是我们需要导出excel,当我们往excel写数据的时候,如果数据量较大的话,这个过程可能需要花些时间. 这个时候我们不能说让用户点完导出按钮后就在那边傻等, ...

  3. img src 文件流_Java中的IO流之输出流|乐字节

    大家好,乐字节小乐又来咯,上次讲到了IO流的输入流,本文将讲述Java输出流. Java输入输出流 一.输出流 1.抽象类:OutputStream 和 Writer OutputStream和Wri ...

  4. MATLAB中fopen、fseek和ftell的用法

    fopen fileID = fopen(filename,permission) 与fclose(fileID)配套使用 filename - 要打开的文件的名称(字符向量或字符串标量) 例:fid ...

  5. 小程序 js把本地或取得临时的视频或者图片路径封装成file文件流

    import FormData from '../../../utils/formdata' uploadFiles(newUrl){ let formData = new FormData();// ...

  6. Linux 文件描述符的概念及与文件流指针的关系

    文件描述符 我们都知道,使用open打开一个文件后都会得到一个文件描述符,而且是一个非负正数,那这个数字是怎么来的呢? 当我们打使用open打开文件时,系统会为我们指定的文件创建一个文件描述信息结构体 ...

  7. golang mysql大量写入_Golang 实现分片读取http超大文件流和并发控制

    分片读取http超大文件流 Golang中的HTTP发送get请求,在获取内容有两种情况. Golang发送http get请求方式 resp, err := http.Get(sendUrl) if ...

  8. 【前端图片转化】 base64格式 转为 File文件类型

    下面的函数能将base664格式 用于已知bseae64 转File格式上传 求点赞!! 关注!! 收藏 !! base64格式的图片不能直接上传到oss图片服务器的,需要转换成file文件流的形式上 ...

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

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

最新文章

  1. 能详细地讲讲stm32该怎么学吗?
  2. python调用c#dll_详解Python 调用C# dll库最简方法
  3. Fragment向ChildFragment传值
  4. 使用SWAGGER和ASP.NET CORE设置可选路由参数
  5. 走出囚徒困境的方法_囚徒困境的一种计算方法
  6. spring 使用其他类protected方法_Java操作bean、属性、方法的使用工具类
  7. 微课|《Python编程基础与案例集锦(中学版)》第4章例题讲解(2)
  8. ls命令输出的文件颜色
  9. 从sap获取数据写入数据库操作
  10. BackTrack 3下使用spoonwep2破解WEP加密的无线路由器
  11. ADNI-MRI-PET-ANALYSIS
  12. 范浩强树的学习历程,同时附加一个例题HDU4585shaolin
  13. 如何应对微信群舆情?
  14. 2.1.1队列——雏形(初始版本)
  15. java sql2005驱动_sqljdbc.jar下载-sqljdbc.jar 2005下载官方版-jdbc连接数据库mssql驱动西西软件下载...
  16. EOS核心特点是什么?
  17. JS 手机浏览器唤醒手机QQ
  18. 怎么写实验论文的结果和分析
  19. mysql 提示The maximum column size is 767 bytes.
  20. 2023 年腾讯云服务器租用价格表出炉(CPU、内存、带宽、系统盘)

热门文章

  1. 推荐10款优秀的JavaScript Web UI库 框架和套件
  2. 兼容低版本迅雷的js调用
  3. Python代码高亮显示工具
  4. mysql binlog的查询
  5. OSChina 周六乱弹 —— 去做点疯狂的事情
  6. HTTP协议通信原理 (资源)
  7. ATT、IBM等公司结成新的物联网网络安全联盟
  8. 8、Python与设计模式--门面模式
  9. PowerShell图形化编程1-原理
  10. Charles是mac的iddler抓包工具