转载自:http://blog.csdn.net/xidianzhimeng/article/details/23541289
1 fopen
函数原型:FILE * fopen(const char * path,const char * mode);
返回值:文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。
fopen_s,_wfopen_s安全性上相对于fopen有所增强,如果成功则返回0,失败则返回响应的错误代码
errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );
errno_t _wfopen_s( FILE** pFile, const wchar_t *filename, const wchar_t *mode ); 

使用文件的方式共有12种

方式

意 义

"rt"

只读打开 文本文件

"wt"

只写打开或建立 文本文件

"at"

追加打开 文本文件

"rb"

只读打开 二进制文件

"wb"

只写打开或建立 二进制文件

"ab"

追加打开 二进制文件

"rt+"

读写打开 文本文件

"wt+"

读写打开或建立 文本文件

"at+"

读写打开文本文件,可追加

"rb+"

读写打开二进制文件

"wb+"

读写打开或建立二进制文件

"ab+"

读写打开二进制文件,可追加

说明:

1. 文件使用方式由r,w,a,t,b,+六个字符拼成,各字符的含义是:

r(read) 读                       w(write)  写             a(append) 追加      + 读和写

t(text) 文本文件,可省略不写     b(banary)  二进制文件

2. 用"r"打开的文件只能读,且文件必须已经存在。

3. 用"w"打开的文件只能写。 若文件不存在,建立之,否则,覆盖之。

4. 用"a"打开的文件只能写,内容追加。文件必须已经存在,否则出错。

5. 打开文件出错时,fopen将返回 NULL。

6. 对于文本文件,读入内存时转换为二进制形式,写入硬盘时转换为文本形式,转换需要一点点时间。对二进制文件的读写不存在这种转换。

7. 文件使用完毕,应关闭之,以避免数据丢失等错误。

8. 标准输入文件(键盘),标准输出文件(显示器 ),标准出错输出(出错信息)由系统打开,可直接使用。


2 fread和fwrite
函数原型:size_t fread ( void   *buffer,  size_t size,  size_t count,  FILE *stream) ;
功 能:从一个文件流中读数据,最多读取count个元素,每个元素size字节,如果调用成功返回实际读取到的元素个数,如果不成功返回 0。
参 数: buffer用于接收数据的内存地址,大小至少是size*count字节.
        size单个元素的大小,单位是字节
        count元素的个数,每个元素是size字节.
        stream输入流
返回值:实际读取的元素个数.如果返回值与count不相同,则可能文件结尾或发生错误.
函数原型:size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream);
注意:这个函数以二进制形式对文件进行操作,不局限于文本文件
(1)buffer:是一个指针,对fwrite来说,是要获取数据的地址;
(2)size:要写入内容的单字节数;
(3)count:要进行写入size字节的数据项的个数;
(4)stream:目标文件指针;
(5)返回实际写入的数据项个数count。
说明:写入到文件的哪里? 这个与文件的打开模式有关,如果是w+,则是从file pointer指向的地址开始写,替换掉之后的内容,文件的长度可以不变,stream的位置移动count个数;如果是a+,则从文件的末尾开始添加,文件长度加大。
fseek对此函数有作用,但是fwrite函数写到用户空间缓冲区,并未同步到文件中,所以修改后要将内存与文件同步可以用fflush(FILE *fp)函数同步。
fwrite一般用来写入char*,int*不能直接写。 因为通常我们写入int到文件希望看到效果是一个数,如1,2,3等。但是int占2个或4个字节,用fwrite写入时,一个int是按2个或4个字节写到文件中的,而文件显示时是按一个字节一个字节的显示内容,它不会把4个字节连续起来显示,所以它不可能是1,2,3这样的单字符字样。除了格式化输入fprintf外,还可以进行类型转换,如下所示,但是读取的时候不能使用fread了,只能使用fscanf或fscanf_s函数。 
char tmp[100] = {0};_itoa_s(int, tmp, 10);
fwrite(tmp, strlen(tmp), 1, file); fwrite("\t", 1, 1, file);memset(sbuf,0,100);
相对于使用格式化输入,如果循环写数据的话上面的写法较为繁琐了些(5句话使用1句话就可以代替了)
fprintf(file, "%d ", int);

3 fprintf和fscanf

int fprintf(FILE *stream,const char *format,[argument]) 

fprintf()函数根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件. fprintf()只能和printf()一样工作. fprintf()的返回值是输出的字符数,发生错误时返回一个负值.

%d 十进制有符号整数

%i 一个整数

%u 十进制无符号整数

%f 浮点数

%s 字符串

%c 单个字符

%p指针的值

%e 指数形式的浮点数

%x, %X 无符号以十六进制表示的整数

%o 无符号以八进制表示的整数

%g 自动选择合适的表示法

%n 等于读取字符数量的整数

%[] 一个字符集

%% 一个精度符号

int fscanf(FILE* stream,const char *format,[argument...]);

返回值:整型,成功读入的参数的个数

int fscanf_s(FILE* stream,const char *format,[argument...]);


4 fclose,ferror,feof

fclose(文件指针)正常关闭时返回0,否则返回非零。

从ferror和feof获取错误信息或检测是否到达文件结尾

feof文件结束返回非0,否则返回0


5 fseek

int fseek( FILE *stream, long offset, int origin );

第一个参数stream为文件指针

第二个参数offset为偏移量,正数表示正向偏移,负数表示负向偏移

第三个参数origin设定从文件的哪里开始偏移,可能取值为:SEEK_CUR、 SEEK_END 或 SEEK_SET

SEEK_SET文件开头  SEEK_CUR当前位置SEEK_END文件结尾


6 rewind,ftell
原型:void rewind(FILE *stream);
功能:将文件指针重新指向一个流的开头,等同于fseek(stream, 0L, SEEK_SET)
原型:long ftell(FILE *fp)
功能:得到流式文件的当前读写位置,其返回值是当前读写位置偏离文件头部的字节数。
例子:一般我们会通过下面的方法来获取文件中字符的个数:
    FILE *fs=fopen("C:\1.txt","r");//创建文件流
    fseek(fs,0,SEEK_END);//将文件内部指针放到文件最后面
    length=ftell(fs);//读取文件指针的位置,得到文件字符的个数
    rewind(fs);//将文件指针重置到文件最前面

7 fgetc/fputc/fgets/fputs

fgetc函数

(1)一般调用形式  ch=fgetc(fp);

(2)作用 从指定的文件读入一个字符,即从fp所指向的文件中读入一个字符赋给ch。

(3)返回值

成功:返回值所得到的字符;       失败:返回EOF(-1)。

fputc函数

(1)一般调用形式  fputc(ch,fp);

(2)作用  把一个字符写到磁盘文件上去,即将字符ch输出到fp所指向的文件中去。

(3)返回值

成功:返回值就是输出的字符;     失败:返回EOF(-1)。

说明:函数putchar()是在stdio.h中用预处理命令定义的宏,即:

#define putchar(c)     fputc(c,stdout)

char *fgets(char *str, int num, FILE *fp)

参数说明:str: 保存从文件读取出来的字符串

fp: 待读文件的文件指针

num: 表示从文件中读出的字符串不超过 n-1个字符。在读入的最后一个字符后加上串结束标志'\0'

int fputs(const char * s,FILE * stream)

功 能:向指定的文件写入一个字符串(不自动写入字符串结束标记符‘\0’)。成功写入一个字符串后,文件的位置指针会自动后移,函数返回为一个非负整数;否则返回EOF(符号常量,其值为-1)。

fopen\fread\fwrite\fscanf\fprintf\fseek\feof\rewind\fgets\fputc等系列函数使用总结的更多相关文章

  1. fopen\fread\fwrite\fseed函数的使用

    使用 <stdio.h> 头文件中的 fopen() 函数即可打开文件,它的用法为: FILE *fopen(char *filename, char *mode); filename为文 ...

  2. 读写大“二进制”文件,不必申请很大内存(fopen,fread,fwrite,fclose)

    <?php /** * 读写大二进制文件,不必申请很大内存 * 只有读取到内容才创建文件 * 保证目录可写 * * @param string $srcPath 源文件路径 * @param s ...

  3. linux缓冲的概念fopen /open,read/write和fread/fwrite区别

    fopen /open区别 UNIX环境下的C 对二进制流文件的读写有两套班子:1) fopen,fread,fwrite ; 2) open, read, write这里简单的介绍一下他们的区别.1 ...

  4. fopen /open,read/write和fread/fwrite区别

    fopen /open,read/write和fread/fwrite区别         转载URL:http://hi.baidu.com/%B9%C8%C9%F1%B2%BB%CB%C0jdp/ ...

  5. 文件流:"fopen","fclose",“ftell”"fseek","fgets","fprintf" ,“feof”,"fwrite","fread"

    char const* filename="D:/hello.txt"; 路径名使用的是“/”或者使用 转义字符“\\”: "fopen", FILE *fp= ...

  6. C语言fprintf, fwrite, fscanf, fread混用问题

    int main(int argc, const char * argv[]) { // insert code here... FILE * fp = fopen("test.txt&qu ...

  7. C/C++读写文件的几种方法fstream fopen、fwrite()、fread()操作

    C中采用的主要是文件指针的办法,C++中对文件的操作主要运用了"文件流"(即非标准的输入输出)的思想 c读写文件fopen C 库函数 FILE *fopen(const char ...

  8. fseek ftell rewind

    下面几个函数的头文件 : <stdio.h>   fseek int fseek( FILE *stream, long offset, int origin ); 第一个参数stream ...

  9. 那些年,坑死自己的事之fread/fwrite

    今天继续看牛人做过的东西,这个小程序并不大,加上相当多的注释行,才5000多行.这个小程序是在linux下实现的,之前自己也一直用vi来看并加以更加详细的注释,但是效率实在太低.于是将其转移到wind ...

随机推荐

  1. C++类继承内存布局(三)

    参考:http://blog.csdn.net/jiangyi711/article/details/4890889# (三)成员函数 类X中每一个非静态成员函数都会接受一个特殊的隐藏参数——this ...

  2. 嵌入Web资源的方法

    可以将js .图片.css等嵌入Assembly中,这样就不用将文件在aspx中写了,特别适合做自定义控件的时候将控件用到的资源打包. 将文件放到项目的合适路径,比如jpg文件所在路径的namespa ...

  3. 配置php连接apache

    配置php连接apache 1.安装php所需要的库 yum install zlib-devel libxml2-devel libjpeg-devel libjpeg-turbo-devel li ...

  4. python 访问php程序,实现定时

    #!/usr/bin/python #test2.py import sys import urllib2 j = True jj = 1##########用于统计,所以分页, url = 'htt ...

  5. centos 不支持mysql

    感觉是php-odbc必须装 yum -y install php php-fpm yum –y install php-mysql php-common php-mbstring php-gd ph ...

  6. iOS面试题6.30总结

    越来越多的人投入iOS这个行业中,但是作为刚才学校毕业的学生,我们没有任何经验.或者经验很少.但是这也不能阻挡我们对苹果的热情,想投入iOS的开发中.而作为进入企业的第一步,我们要参加面试.面试中我们 ...

  7. 数据库(MSSQLServer,Oracle,DB2,MySql)常见语句以及问题(续1之拼接字符串)

    上一篇文章http://www.cnblogs.com/valiant1882331/p/4056403.html写的太长了,所以就换了一篇,链接上一节继续 字符串的拼接 MySql中可以使用&quo ...

  8. Oracle课堂实验一“表的使用”代码。

    --创建本地管理表空间CustomerTBSCREATE TABLESPACE CustomerTBS         DATAFILE 'd:\Oracle11\product\11.2.0\ora ...

  9. MySQL字符串中数字排序的问题

    1.select * from table where 1   order by id*1 desc; 2.select * from table where 1 order by id+0 desc ...

  10. Python 学习之urllib模块---用于发送网络请求,获取数据(4)

    承接将查询城市编码的结果保存到文件中,以字典的形式保存,目的是为了在查询某个城市的天气的时候,能够通过输入的城市名称,找到对应的城市编码.所以此结果字典的数据结构,就是city={城市名称:城市编码} ...