手机网站模板带后台,聊城做网站公司聊城博达,夏天做啥网站能致富,wordpress如何ftp前言
在文件操作#xff08;上卷#xff09;中#xff0c;讲到的主要都是正式文件操作开始之前的前置知识#xff0c;而这一卷中#xff0c;我们将开始正式地操作文件。 在上卷中我们已经说到#xff0c;stdin stdout stderr是三个C语言程序启动时默认打开的流。这三个流…前言
在文件操作上卷中讲到的主要都是正式文件操作开始之前的前置知识而这一卷中我们将开始正式地操作文件。 在上卷中我们已经说到stdin stdout stderr是三个C语言程序启动时默认打开的流。这三个流的类型是FILE*通常称为文件指针。而C语言就是通过FILE*的文件指针来维护流的各种操作的。
文件指针
缓冲文件系统中关键的概念是“文件类型指针”简称“文件指针”。
每个被使用的文件包括外部设备都在内存中开辟了一个相应的文件信息区用来存放文件的相关信息如文件的名字文件状态及文件当前的位置等。当我们打开一个文件时就会创造一个和这个文件相关的文件信息区。
这些信息保存在一个结构体变量中。该结构体类型是由系统声明的取名FILE。 比如图中我们现在有一个data.txt文件操作这个文件就会创造一个FILE类型的文件信息区f文件信息区和我们的文件建立了一定联系里面放着文件相关的各种信息。
在vs2013编译器环境提供的stdio.h头文件中有以下的文件类型声明
struct _iobuf{char* _ptr;int _cnt;char* _base;int _flag;int _file;int _charbuf;int _bufsiz;char* _tmpfname;
};typedef struct _iobuf FILE;//使用typedef重命名
可以看到我们的FILE其实是对一个结构体类型的重命名FILE就是这样一个结构体类型。
所以我们创建的文件信息区就是创建的一个结构体变量。
注意不同的C编译器的FILE类型包含的内容不完全相同但大同小异。
每当打开一个文件时系统会根据文件的情况自动创建一个FILE结构的变量并填充其中的信息使用者则不必关心细节。
一般都是通过一个FILE的指针来维护这个FILE结构的变量这样使用起来更加方便。
我们的文件信息区是有地址的我们将其地址放到一个类型为FILE*的指针中去。
我们上面说stdin stdout stderr这三个流的类型是FILE*现在我们知道其实它们就是指向FILE类型文件信息区的三个指针。
每个文件都有自己的文件信息区文件是在硬盘上放着的文件信息区是在内存上放着的。 文件的打开和关闭 文件的操作 1.打开文件---打开流 2.读写文件---读/写流 3.关闭文件---关闭流 流的底层是怎么做的不用关心。
ANSI C规定使用fopen函数来打开文件fclose来关闭文件。
fopen 第一个参数是文件名后一个参数是文件的打开方式。
最终返回的是文件信息的地址。用它可以找到文件信息区就可以找到流。
mode表示文件的打开模式有很多种以下都是 注意是双引号。
文件操作示意图 w只读如果指定的文件存在会把文件内容清洗掉然后展示出一个空的文件如果指定的文件不存在就会建立一个新的文件。
演示 可以看到我们就生成了一个data.txt大小为0。 现在我们在data.txt里写一点东西 那么当我们再次运行程序此时是已存在这个文件会发现运行完再打开这个文件发现已经被改为空白了 这就是w只读的特点如果指定的文件存在会把文件内容清洗掉然后展示出一个空的文件如果指定的文件不存在就会建立一个新的文件。
如果是r的方式打开现在我们还是打开data.txt因为存在所以运行起来不会报错。 如果我们把这个文件删除然后再运行 这时就给出了相应的报错信息没有这样的文件或目录。 打开文件后我们读文件或写文件然后我们就要关闭文件。
fclose 所以我们就这样关闭文件 但是流关掉后我们的pf的地址其实还在不会自己置空避免变为野指针我们要置为空 打开其他位置的文件
可以发现我们现在打开的文件必须在当前工程路径底下那如果现在我们想打开桌面放置的一个文件呢
那就加上路径。路径在哪看右击这个文件点开属性 可以看到位置一行后面的就是路径所以我们这样写 记得将\写为\\否则会被当做转义字符。
这种从“根”上开始的写法叫做绝对路径。
此外还有一种相对路径的写法
比如我们可以用来打开上一级路径下的文件
这是我们的工程目录 可以理解为test.c所在的这一个目录
所以这就是上一级路径 .表示当前路径..表示上一级路径所以我们的代码这样写
FILE* pf fopen(.\\..\\data.txt, w);
这就是当前路径的上一级路径底下的data.txt文件。
如果我们想要打开上一级的上一级路径下的文件就这样写
FILE* pf fopen(.\\..\\..\\data.txt, w);
这就是当前路径的上一级的上一级路径底下的data.txt文件。
从这种写法可以看出相对路径所谓的相对就是相对于当前位置的路径的意思。 文件的顺序读写
有两种读写一种叫顺序读写一种叫随机读写。
顺序读写函数介绍 fgetc也就是读字符。fputc是写字符。fgets是读字符串fputs是写字符串。
文本行就是多个字符的意思。
fscanf和fprintf是格式化输入和输出。
fread和fwrite是二进制输入和输出。
前面的6个函数读和写的都是文本信息也就是肉眼能看得懂而后面两个读和写的是二进制的信息。
fputc函数 前一个参数是要写的字符后一个参数是流 。
现在我们可以把字母a~z写到test.txt中去。 fgetc函数 只有一个参数就是流文件指针返回一个int。 成功情况返回的是读到字符的ASCII码值。
如果读取失败会返回一个EOF。也就是end of file文件的结束标志其实设置在全局变量中。 可以写下EOF右击转到定义会看到其实本质就是-1。
那么现在我们可以试着读一下我们刚才写的字符 其实在我们读或者写的时候文件都有一个光标在按顺序移动否则读和写就乱套了。 我们还可以这样写把所有字符都读取 补充fgetc fputc的适用范围
这时我们还注意到上面说到前6个函数适用于所有输入输出流 这是个什么情况呢
当我们以读的形式打开文件得到的是文件的输入流当我们以写的形式打开文件得到的是文件的输出流。
stdin stdout也是输入和输出流那么我们前面提到的两个函数也能适用于这两个标准流。 所以这两个函数可以适用于标准输出输入流或文件输出输入流。 到此本文内容就结束了后面会继续补充文件操作相关的内容祝阅读愉快^_^