C语言的文件操作,详解(上)

本章包含一下几个方面: 1.为什么使用文件

当我们打开任何一个程序的时候,程序运行,跑起来,然后关闭,这就是一套的流程,我们在程序跑起来的时候过程那些产生的文件,全都会在程序关闭的时候销毁,这就引发一个问题,如果这些数据很重要,我希望它能保留下来,那我就得找个地方把它存起来,这个时候我们就需要文件了。

2.什么是文件

磁盘上的文件是文件。 但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。 这里我举个例子方便理解: 程序文件 包括源程序文件(后缀为 .c ) , 目标文件( windows 环境后缀为 .obj ) , 可执行程序( windows 环境 后缀为 .exe )。 C语言的文件操作,详解(上)

以这个举例子,我创建了一个project4的文件,在里面随便写了点东西,在之后的程序文件里面就可以发现这样的一个.c后缀名的文件,这个就是原程序文件。

同样,在这里还可以翻到一个应用文件,如图:

C语言的文件操作,详解(上)

 这些都是我们所说的程序文件。

那什么是数据文件呢?

数据文件 文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文 件,或者输出内容的文件。 举个例子 我创建了一个程序,叫test.c,然后我又创建了个文本,叫date.txt,我通过程序在date里面放了一堆数据,然后再之后调用date读取里面的数据,那这里的date就叫数据文件。 文件名 一个文件要有一个唯一的文件标识,以便用户识别和引用。 文件名包含 3 部分:文件路径 + 文件名主干 + 文件后缀 例如: c:\code\test.txt 这个意思就是在c盘的code目录下面有一个文件,文件名是test.txt 为了方便起见,文件标识常被称为 文件名,这个地方就不多讲。 文件的打开和关闭 文件指针 缓冲文件系统中,关键的概念是 “ 文件类型指针 ” ,简称 “ 文件指针 ” 。 每个被使用的文件都在内存中开辟了一个相应的文件信息区,用来存放文件的相关信息(如文件的名 字,文件状态及文件当前的位置等)。这些信息是保存在一个结构体变量中的。该结构体类型是有系统 声明的,取名 FILE . 这里为了方便理解,我举个例子,你想喝水的时候,是不是要先拿起水瓶拧开瓶盖,然后喝掉里面的水,等喝完了水再把瓶盖盖起来?这里就是同理。

如果你有兴趣,可以打开vs看看这个FILE里面到底是什么东西,这里以我的vs2013示范:

struct _iobuf {         char * _ptr ;         int   _cnt ;         char * _base ;         int   _flag ;         int   _file ;         int   _charbuf ;         int   _bufsiz ;         char * _tmpfname ;       }; typedef struct _iobuf FILE ;

可以看到它创建了一个结构体,结构体名字是_iobuf ,包含了一丢的数据类型,char* 、int,最后用typedef重命名。

那我们要不要考虑这个结构体怎么用呢?

不用担心,当打开文件的时候系统会自动往里面填充数据,直接用就好了。 

我们可以创建一个FILE类型的指针变量,就跟创建其他指针一样:

FILE* p;

这个指针可以指向数据内存中的某一个文件,对其进行操作,也就是说:通过文件指针变量能够找到与它关联的文件

文件的打开和关闭

就好像你喝完水瓶子要重新盖好一样,文件打开完后也是要关闭的,ANSIC 规定使用fopen函数来打开文件,fclose来关闭文件。

fopen

C语言的文件操作,详解(上)

从上面的图我们可以看到,当我们运用fopen函数的时候有好几种模式,每个模式对应有不同的效果。

 这里说一下,fopen的返回值是一个指针,指针指向的是要操作的文件,如果返回的是一个空指针,则说明打开的时候遇到了错误。

示范如下:

C语言的文件操作,详解(上)

这是很简单的代码,打开text.txt文件,以 只写 的形式打开。

C语言的文件操作,详解(上)

这是目前的项目栏 

我们让程序跑起来:

C语言的文件操作,详解(上)

 C语言的文件操作,详解(上)

 我们可以看到多出来一个text的文件,这个就是fopen创建出来的一个文本文件。

再示范一下,这次我们拿 "r" ,对于文件的只读形式来试试:

C语言的文件操作,详解(上)

这里我让程序打开一个叫txtt.txt的文件,这个文件是不存在的,那会发生什么呢?

C语言的文件操作,详解(上) 

程序先是跑起来了,再之后蹦出弹屏告诉我失败,这就是以只读的形式打开不存在的文件报的错,要多多注意。

其他我就不一一列举了,有兴趣的可以自己下来尝试一下。 

在打开完文件之后,别忘了要关闭文件,用到fclose:

C语言的文件操作,详解(上)

这个用起来就简单多了,:

  fclose (pf ); 那整串代码连起来,就是这样: C语言的文件操作,详解(上)

上一篇:PLSQL_通过UTL_MAIL发送并发程式结果报表至用户邮箱(案例)


下一篇:buuctf-pwn:jarvisoj_level6_x64