一.文件打开

  使用 fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE包含了所有用来控制流的必要的信息。函数原型为:

FILE *fopen( const char * filename, const char * mode );

  函数原型中的第一个参数为文件名,第二参数为打开模式。模式可以有r(允许读取),w(允许写入),a(允许追加)等。文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中。现在为了安全考虑,很多编译器都建议使用fopen_s()函数代替fopen()函数。函数原型为:

errno_t fopen_s( FILE** pFile, const char *filename, const char *mode );

代码示例

#include <stdio.h>

int main()
{
FILE *stream_1,*stream_2; stream_1 = fopen("C:\\Users\\greenhat\\Desktop\\文档\\test1.txt", "r+"); errno_t err = fopen_s(&stream_2,"C:\\Users\\greenhat\\Desktop\\文档\\test2.txt", "r+"); return ;
}

  上述运行后会在C:\\Users\\greenhat\\Desktop\\文档\\目录下产生test1.tex和test2.txt两个文件,"r+"表示该文件允许读写操作。

 

二.文件关闭

  使用fclose()函数关闭文件,如果成功关闭文件,fclose()函数返回为零,如果关闭文件时发生错误,函数返回 EOF。函数原型为:

int fclose( FILE *fp );

三.文件写入

  函数 fputc() 把参数 c 的字符值写入到 fp 所指向的输出流中。如果写入成功,它会返回写入的字符,如果发生错误,则会返回 EOF。函数原型为:

int fputc( int c, FILE *fp );

  函数 fputs() 把字符串 s 写入到 fp 所指向的输出流中。如果写入成功,它会返回一个非负值,如果发生错误,则会返回 EOF。数原型为:

int fputs( const char *s, FILE *fp );

  函数fprintf()把一个字符串写入到文件中,根据指定的format(格式)发送信息(参数)到由stream(流)指定的文件.。 fprintf()的返回值是输出的字符数,发生错误时返回一个负值。函数原型为:

int fprintf( FILE *stream, const char *format, ... );

代码示例

#include <stdio.h>

int main()
{
FILE *stream;
errno_t err = fopen_s(&stream,"C:\\Users\\greenhat\\Desktop\\文档\\test.txt", "w+");
fprintf(stream, "测试函数fprintf输出... \n");
fputs("测试函数fputs输出... \n", stream);
fclose(stream); return ;
}

打开文件test.txt可以看到以下结果:

测试函数fprintf输出...
测试函数fputs输出...

四.文件读取

  函数fgetc() 从 fp 所指向的输入文件中读取一个字符。返回值是读取的字符,如果发生错误则返回 EOF。函数原型为:

int fgetc( FILE * fp );

  函数 fgets() 从 fp 所指向的输入流中读取 n - 1 个字符。它会把读取的字符串复制到缓冲区,并在最后追加一个NULL字符来终止字符串。如果这个函数在读取最后一个字符之前就遇到一个换行符 '\n' 或文件的末尾 EOF,则只会返回读取到的字符,包括换行符。函数原型为

char *fgets( char *buf, int n, FILE *fp );

  函数fscanf()从一个流中执行格式化输入,成功返回读入的参数的个数,失败返回EOF(-1)。fscanf()遇到空格和换行时结束,注意空格时也结束。这与fgets()有区别,fgets(0)遇到空格不结束。函数原型为:

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

  为安全期间,现在一般用fscanf_s()函数代替fscanf函数。
代码示例

#include <stdio.h>

int main()
{
FILE *fp;
char buff[]; errno_t err = fopen_s(&fp, "C:\\Users\\greenhat\\Desktop\\文档\\test.txt", "r");
fscanf_s(fp, "%s", buff,);
printf("1 : %s\n", buff); fgets(buff, , (FILE*)fp);
printf("2: %s\n", buff); fgets(buff, , (FILE*)fp);
printf("3: %s\n", buff);
fclose(fp); }

当原来文件中存储的内容如下

Hello world!
How are you!

运行完上述代码后,结果如下

  从运行结果可以看出,函数fprintf()读取遇到空格时读取结束,然后fgets()函数继续读取,直到遇到回车符。最后一个fgets()函数从第二行开始读取到末尾。

C语言的文件读写操作函数小结的更多相关文章

  1. C语言对文件的操作函数用法详解2

    fopen(打开文件) 相关函数 open,fclose 表头文件 #include<stdio.h> 定义函数 FILE * fopen(const char * path,const  ...

  2. C语言对文件的操作函数用法详解1

    在ANSIC中,对文件的操作分为两种方式,即: 流式文件操作 I/O文件操作 一.流式文件操作 这种方式的文件操作有一个重要的结构FILE,FILE在stdio.h中定义如下: typedef str ...

  3. C语言基础文件读写操作

    整理了一份C语言的文件读写件操作代码,测试时打开相应的注释即可. #include <stdio.h> #include <stdlib.h> #include <uni ...

  4. c语言文件读写操作总结

    C语言文件读写操作总结 C语言文件操作 一.标准文件的读写 1.文件的打开 fopen() 文件的打开操作表示将给用户指定的文件在内存分配一个FILE结构区,并将该结构的指针返回给用户程序,以后用户程 ...

  5. C语言文件读写操作

    C语言实现文件读写,注意区分几个方法: 写入: fwrite() //个人认为这个最好,可是实现写入任何数据类型,任何长度 fputs() //写入一个字符串,字符串长度不能太长,具体的长度未知,但估 ...

  6. [转]Android - 文件读写操作 总结

     转自:http://blog.csdn.net/ztp800201/article/details/7322110 Android - 文件读写操作 总结 分类: Android2012-03-05 ...

  7. PHP文件读写操作之文件写入代码

    在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发 ...

  8. python(三)一个文件读写操作的小程序

    我们要实现一个文件读写操作的小程序 首先我们有一个文件 我们要以"============"为界限,每一个角色分割成一个独立的txt文件,按照分割线走的话是分成 xiaoNa_1. ...

  9. 实现动态的XML文件读写操作

    实现动态的XML文件读写操作(依然带干货) 前言 最近由于项目需求,需要读写操作XML文件,并且存储的XML文件格式会随着导入的数据不同而随时改变(当然导入的数据还是有一定约束的),这样我们要预先定义 ...

随机推荐

  1. FusionCharts 3D帕累托图

    1.设计3D帕累托图的页面 Pareto3D.html: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN&q ...

  2. freemarker报错之十一

    1.错误描述 六月 03, 2014 11:00:35 下午 freemarker.log.JDK14LoggerFactory$JDK14Logger error 严重: Template proc ...

  3. 动态规划 POJ3616 Milking Time

    #include <iostream> #include <cstdio> #include <algorithm> using namespace std; st ...

  4. 关于ios手机游览器针对overflow:hidden设置无效的解决办法

    Ordinarily, overflow: hidden; on the body tag is sufficient to prevent scrolling a web page, if for ...

  5. hdu5923 Prediction

    jxt的思路 先膜一发 先处理 T这棵树上每个点到祖先这条链的点所生成的并查集 每个点的并查集都得分开来存 这个dfs做就好了 最后询问的时候 将k 个点的并查集合并就是这个询问的连通图 易得答案 # ...

  6. 标注-隐马尔可夫模型HMM的探究

    1 HMM基本概念1.1 定义1.2 观测序列生成过程1.3 HMM的三个问题2 概率计算算法2.1 直接计算算法2.2 前向算法forward algorithm2.3 后向算法2.4 一些概率与期 ...

  7. Python机器学习中文版

    Python机器学习简介 第一章 让计算机从数据中学习 将数据转化为知识 三类机器学习算法 第二章 训练机器学习分类算法 透过人工神经元一窥早期机器学习历史 使用Python实现感知机算法 基于Iri ...

  8. 【NOI2008】假面舞会(图论,搜索)

    题面 Description 一年一度的假面舞会又开始了,栋栋也兴致勃勃的参加了今年的舞会.今年的面具都是主办方特别定制的.每个参加舞会的人都可以在入场时选择一个自己喜欢的面 具.每个面具都有一个编号 ...

  9. 【BZOJ1087】【SCOI2005】互不侵犯(状态压缩,动态规划)

    题面 这种傻逼题懒得粘贴了... 题解 傻逼题 \(f[i][j][k]\)表示当前第\(i\)列,当前放置状态为\(j\),已经放了\(k\)个 暴力判断状态合法性,暴力判断转移合法性,然后统计答案 ...

  10. SPOJ3267:D-query

    题面 SPOJ3267 Sol 给定\(N\)个正整数构成的序列,将对于指定的闭区间查询其区间内的不同的数的个数 主席树 不是权值线段树 维护位置 如果插入一个数时发现之前有过了 那么修改当前的,那个 ...