fopenFILE * fopen(const char * path,const char * mode);函数说明参数path字符串包含欲打开的文件路径及文件名,参数mode字符串则代表着流形态。mode有下列几种形态字符串:r 打开只读文件,该文件必须存在。r+ 打开可读写的文件,该文件必须存在。rb+ 读写打开一个二进制文件,只允许读写数据。rt+ 读写打开一个文本文件,允许读和写。w 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。w+ 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。a 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留)a+ 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。 (原来的EOF符不保留)wb 只写打开或新建一个二进制文件;只允许写数据。wb+ 读写打开或建立一个二进制文件,允许读和写。wt+ 读写打开或着建立一个文本文件;允许读写。at+ 读写打开一个文本文件,允许读或在文本末追加数据。ab+ 读写打开一个二进制文件,允许读或在文件末追加数据。上述的形态字符串都可以再加一个b字符,如rb、w+b或ab+等组合,加入b 字符用来告诉函数库打开的文件为二进制文件,而非纯文字文件。不过在POSIX系统,包含Linux都会忽略该字符。由fopen()所建立的新文件会具有S_IRUSR|S_IWUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH(0666)权限,此文件权限也会参考umask 值。有些C编译系统可能不完全提供所有这些功能,有的C版本不用"r+","w+","a+",而用"rw","wr","ar"等,读者注意所用系统的规定。返回值文件顺利打开后,指向该流的文件指针就会被返回。若果文件打开失败则返回NULL,并把错误代码存在errno 中。附加说明一般而言,打开文件后会作一些文件读取或写入的动作,若打开文件失败,接下来的读写动作也无法顺利进行,所以在fopen()后请作错误判断及处理。2. fseek功 能  重定位流(数据流/文件)上的文件内部位置指针注意:不是定位文件指针,文件指针指向文件/流。位置指针指向文件内部的字节位置,随着文件的读取会移动,文件指针如果不重新赋值将不会改变指向别的文件。用 法int fseek(FILE *stream, long offset, int fromwhere); fromwhere——//SEEK_SET开头-0,SEEK_CUR当前位置-1,SEEK_END结束-2描 述函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere(偏移起始位置:文件头0,当前位置1,文件尾2)为基准,偏移offset(指针偏移量)个字节的位置。如果执行失败(比如offset超过文件自身大小),则不改变stream指向的位置。返回值成功,返回0,否则返回其他值。fseek position the file(文件) position(位置) pointer(指针) for the file referenced by stream to the byte location calculated by offset.3.ftell函数名: ftell功 能: 返回当前文件指针函数原型: long ftell(FILE *stream);函数功能:函数 ftell() 用于得到文件位置指针当前位置相对于文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。调用函数ftell()就能非常容易地确定文件的当前位置。调用示例:ftell(fp);利用函数 ftell() 也能方便地知道一个文件的长。如以下语句序列: fseek(fp, 0L,SEEK_END); len =ftell(fp); 首先将文件的当前位置移到文件的末尾,然后调用函数ftell()获得当前位置相对于文件首的位移,该位移值等于文件所含字节数。4.fread功 能: 从一个流中读数据函数原型: int fread(void *ptr, int size, int nitems, FILE *stream);参 数:用于接收数据的地址(指针)(ptr)单个元素的大小(size) :单位是字节而不是位,例如读取一个整数值就是4元素个数(nitems)提供数据的文件指针(stream)返回值:成功读取的元素个数5. fwrite向文件读入写入一个数据块用 法fwrite(const void*buffer,size_t size,size_t count,FILE*stream);(1)buffer:是一个指针,对fwrite来说,是要输出数据的地址。(2)size:要写入的字节数;(3)count:要进行写入size字节的数据项的个数;(4)stream:目标文件指针。说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是r+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变;如果是a+,则从文件的末尾开始添加,文件长度加大,而且是fseek函数对此函数没有作用。2).fwrite(file,string,length)参数 描述
file 必需。规定要写入的打开文件。
string 必需。规定要写入文件的字符串。
length 可选。规定要写入的最大字节数。
说明:fwrite() 把 string的内容写入文件指针 file处。 如果指定了 length,当写入了 length个字节或者写完了 string以后,写入就会停止,视乎先碰到哪种情况。 fwrite() 返回写入的字符数,出现错误时则返回 false。6.fclose关闭一个流用法:int fclose(FILE *stream); 

-------------------------------------------------------------

int fseek(FILE * _File, long _Offset, int _Origin);
函数设置文件指针stream的位置。如果执行成功,stream将指向以fromwhere为基准,偏移offset(指针偏移量)个字节的位置,函数返回0。如果执行失败则不改变stream指向的位置,函数返回一个非0值。超出文件末尾位置,还是返回0。往回偏移超出首位置,还是返回0,小心使用。第一个参数stream为文件指针。第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移。第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、SEEK_END或SEEK_SET。
SEEK_SET:文件开头
SEEK_CUR:当前位置
SEEK_END:文件结尾#include<stdio.h>
#define N 5
typedef struct student{long sno;char name[10];float score[3];
}STU;void fun(char*filename,STU n)
{FILE*fp;fp=fopen(filename,"rb+");fseek(fp,-1L*sizeof(STU),SEEK_END);fwrite(&n,sizeof(STU),1,fp);fclose(fp);
}int main()/*修改覆盖最后一个学生数据*/
{STU t[N]={{10001,"MaChao",91,92,77},{10002,"CaoKai",75,60,88},{10003,"LiSi",85,70,78},{10004,"FangFang",90,82,87},{10005,"ZhangSan",95,80,88}};STU n={10006,"ZhaoSi",55,70,68},ss[N];int i,j;FILE*fp;fp=fopen("student.dat","wb");fwrite(t,sizeof(STU),N,fp);fclose(fp);fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);printf("\nThe original data:\n\n");for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}fun("student.dat",n);printf("\nThe data after modifing:\n\n");fp=fopen("student.dat","rb");fread(ss,sizeof(STU),N,fp);fclose(fp);for(j=0;j<N;j++){printf("\nNo:%ldName:%-8sScores:",ss[j].sno,ss[j].name);for(i=0;i<3;i++)printf("%6.2f",ss[j].score[i]);printf("\n");}return 0;
}ftell函数
ftell函数用于得到文件位置指针当前位置相对与文件首的偏移字节数。在随机方式存取文件时,由于文件位置频繁的前后移动,程序不容易确定文件的当前位置。
long len = ftell(fp) #include <stdio.h>
int main( void )
{FILE *stream;stream = fopen( "MYFILE.TXT", "w+" );fprintf( stream, "This is a test" );printf( "The file pointer is at byte \
%ld\n", ftell( stream ) );fclose( stream );return(0);
}ftell一般用于读取文件的长度,下面补充一个例子,读取文本文件中的内容:#include <stdio.h>
#include <stdlib.h>
int main()
{FILE *fp;int flen;char *p;
/* 以只读方式打开文件 */if ( (fp = fopen( "1.txt", "r" ) ) == NULL ){printf( "\nfile open error\n" );exit( 0 );}fseek( fp, 0L, SEEK_END );       /* 定位到文件末尾 */flen = ftell( fp );         /* 得到文件大小 */p = (char *) malloc( flen + 1 ); /* 根据文件大小动态分配内存空间 */if ( p == NULL ){fclose( fp );return(0);}fseek( fp, 0L, SEEK_SET );       /* 定位到文件开头 */fread( p, flen, 1, fp );        /* 一次性读取全部文件内容 */p[flen] = '\0';             /* 字符串结束标志 */printf( "%s", p );fclose( fp );free( p );return(0);
}程序改进#include <stdio.h>
main()
{FILE *myf;long f1; /* 此处将f1设置为long 可以读取更长的文件 */myf = fopen( "1.txt", "rb" );fseek( myf, 0, SEEK_END );f1 = ftell( myf );fclose( myf );printf( “ % d \ n ”, f1 );
}

----------------------------------------------------------------

#include<stdio.h>#include<stdlib.h>#include<string.h>#define filelen 10int main(){int ret,i;FILE * fp = fopen("test","w+");      //读/写打开,创建/清空char buf_w[filelen] = {"HeLlow!"};for(i=0;i<filelen;i++){printf("[%d] %c ",i,buf_w[i]);}//打印    [0] H [1] e [2] L [3] l [4] o [5] w [6] ! [7]  [8]  [9]char buf_r[filelen];ret = fwrite(buf_w,sizeof(char),filelen,fp);  //此时文件指针已经到了文件尾部printf("fwrit: %d\n",ret);rewind(fp);       //将文件指针置于文件头部memset(buf_r,0,sizeof(buf_r));ret = fread(buf_r,sizeof(char),filelen,fp);  //此时文件指针再次到了尾部printf("fread: %d\n",ret);for(i=0;i<filelen;i++){printf("[%d] %c ",i,buf_r[i]);}//打印    [0] H [1] e [2] L [3] l [4] o [5] w [6] ! [7]  [8]  [9]  ret = fseek(fp,0,SEEK_SET);          //将文件指针置于距离 头部 偏移量 为 0 的位置,等同于rewind()memset(buf_r,0,sizeof(buf_r));ret = fread(buf_r,sizeof(char),filelen,fp);   //文件指针到达文件尾部printf("1 ret:%d  buf_r[0]:%c\n",ret,buf_r[0]);//打印 1 ret:10  buf_r[0]:Hfseek(fp,-4,SEEK_CUR);                      //文件指针尾部向前偏移 4memset(buf_r,0,sizeof(buf_r));ret = fread(buf_r,sizeof(char),filelen,fp);  //文件指针到达文件尾部printf("2 ret:%d buf_r[0]:%c\n",ret,buf_r[0]);//打印  2 ret:4 buf_r[0]:!fseek(fp,0,SEEK_END);                         //文件指针置于尾部memset(buf_r,0,sizeof(buf_r));ret = fread(buf_r,sizeof(char),filelen,fp);printf("3 ret:%d buf_r[0]:%c\n",ret,buf_r[0]);//打印 3 ret:0 buf_r[0]:ret = ftell(fp);                                           //从文件开始到当前位置的偏移值,与fseek(fp,0,SEEK_END)配合,计算文件的大小。 printf("4 ret:%d\n",ret);
// 打印 4 ret:10fclose(fp);return 0;}程序运行结果:
[0] H [1] e [2] L [3] l [4] o [5] w [6] ! [7]  [8]  [9]
fwrit: 10
fread: 10
[0] H [1] e [2] L [3] l [4] o [5] w [6] ! [7]  [8]  [9]
1 ret:10  buf_r[0]:H
2 ret:4 buf_r[0]:!
3 ret:0 buf_r[0]:
4 ret:10

fseek、ftell文件操作函数相关推荐

  1. C语言文件操作函数大全(看到总结的真的很好,就转载贡献给大家了)

    C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof 表头文件 #include<stdio.h> 定义函数 void clearerr(FILE * st ...

  2. matlab常用函数——文件操作函数

    十一.基本文件操作函数 1)文件创建函数 filemaker :把文件名与文件中函数名分开 . filesep :文件目录分隔. fileparts :把目标文件名拆分成字符串形式输出 . tempd ...

  3. C/C++,C++文件操作函数

    目录 一.标准文件函数 [1]文件的打开和关闭 [2]文件操作的函数 [3]文件的随机读写 [4]读写指针位置操作 二.非标准文件函数 [1] 文件的打开与关闭 [2]读写函数 [3]随机定位函数 三 ...

  4. linux c文件操作,C语言文件操作(FILE)与常用文件操作函数

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

  5. 文件操作(FILE)与常用文件操作函数——C语言

    文件 1.文件基本概念 C程序把文件分为ASCII文件和二进制文件,ASCII文件又称文本文件,二进制文件和文本文件(也称ASCII码文件)二进制文件中,数值型数据是以二进制形式存储的, 而在文本文件 ...

  6. C语言程序设计 文件操作函数

    文件操作函数 C语言 (FILE fputc fgetc fputs fgets fscanf fprintf) 在ANSI C中,对文件的操作分为两种方式,即流式文件操作和I/O文件操作,下面就分别 ...

  7. C语言File文件操作函数学习

    C语言File文件操作函数学习 (禁止转载) (content from <C Primer Plus, Fifth Edition> By Stephen Prata) · Functi ...

  8. 使用文件操作函数实现:文件的复制功能。

    2019独角兽企业重金招聘Python工程师标准>>> //使用文件操作函数实现:文件的复制功能. #include <stdio.h> #include <std ...

  9. php文件有哪几种,PHP常用的文件操作函数有哪些

    PHP常用的文件操作函数有哪些 本文主要总结的PHP文件操作函数.当然,这只是部分,还有很多,我没有列出来.欢饮阅读参考! 一 .解析路径: 1 获得文件名: basename(); 给出一个包含有指 ...

最新文章

  1. Silverlight RIA Services基础专题
  2. 安全用电基本知识,弱电工程人员要学会!
  3. electron 样式不加载_electron-vue,启动之后没了样式和图片是什么原因呢,请大佬帮忙康康...
  4. AFN中请求序列化的设置
  5. rtsp服务器搭建_如何从“零”开始搭建直播平台
  6. 【Python】Github上125k+Star的Python算法资料
  7. [JS] - 判断IE6和IE7
  8. WordPress 自定义插件初始化及卸载
  9. 字典与集合_月隐学python第8课
  10. Android 中文api (81)——InputMethod [输入法]
  11. linux 设置ssh并发度,在linux如何使用ControlPersist加快SSH连接速度的问题
  12. java中有效关键字_java中有效的关键字
  13. MySQL数据以全量和增量方式,同步到ES搜索引擎
  14. webots自学笔记(五)使用物理插件ODE建立铰链
  15. Python实现人脸识别
  16. Encoded password does not look like BCrypt 异常处理
  17. java写一个android程序_【Android开发笔记】3.编写第一个Android程序
  18. Springboot源码分析第一弹 - 自动装配实现
  19. sqlserver、mysql、oracle各自的默认端口号
  20. android usb充电电流,留心手机充电电流大小,别等到“机毁人伤”时才后悔!

热门文章

  1. python 统计组合用什么库_盘点2018年热门Python库|TOP20
  2. linux查看python解释器位置——及linux虚拟环境中的python解释器位置
  3. Python用Tkinter实现日期计算器
  4. js读取excel或者导出成excel时权限设置问题
  5. Android体系结构
  6. 三创数据分析题库及个人作答
  7. 内存模块与计算机兼容,cpu和内存条不兼容怎么办cpu和内存条不兼容的解决方法...
  8. 双重差分模型了解一下?
  9. 在windows下jdk环境变量配置
  10. 最常用的器件PCB封装尺寸大全