> 文档中心 > [C语言] 文件操作《一》

[C语言] 文件操作《一》


  个人主页:欢迎大家光临——>沙漠下的胡杨

  各位大帅哥,大漂亮

 如果觉得文章对自己有帮助

 可以一键三连支持博主

 你的每一分关心都是我坚持的动力

 

 ☄: 本期重点:文件操作相关知识

  希望大家每天都心情愉悦的学习和工作。 

什么是文件呢?为什么要有文件呢?文件名是什么?

磁盘上的文件是文件,但是在程序设计中,我们一般谈的文件有两种:程序文件、数据文件(从文件功能的角度来分类的)。 程序文件: 包括源程序文件(后缀为 .c , 目标文件( windows 环境后缀为 .obj , 可执行程序( windows 环境后缀为.exe )。 数据文件: 文件的内容不一定是程序,而是程序运行时读写的数据,比如程序运行需要从中读取数据的文件,或者输出内容的文件 这就叫做文件。我们一般数据持久化的方法有,把数据存放在磁盘文件、存放到数据库等方式。 使用文件我们可以将数据直接存放在电脑的硬盘上,做到了数据的持久化,这就是我们为什么使用文件。 一个文件要有一个唯一的文件标识,以便用户识别和引用,文文件标识包含3 部分:文件路径 + 文件名主干 + 文件后缀,一般我们也把文件标识叫做文件名。

 流的概念:

流是一个系统与一个程序之间形成的一个通道。二者是一对一个关系,流表达了二者之间可以互动的能力。所谓的“ANSI C程序运行时系统必须提供三个流,stdin,stdout,stderr”,就是说系统必须提供这三种“通道”,即

1,程序与标准输入(默认键盘)之间的通道       stdin

2,程序与标准输出(默认显示器)之间的通道   stdout

3,程序与终端(默认也是显示器)之间的通道   stderr

还有我们要今天重点谈的文件流,用FILE*的指针来指向内存进行后续操作。

文件的打开和关闭

文件在读写之前应该先 打开文件 ,在使用结束之后应该 关闭文件 。 在编写程序的时候,在打开文件的同时,都会返回一个FILE* 的指针变量指向该文件,也相当于建立了指 针和文件关系。 ANSIC 规定使用fopen函数来打开文件,fclose 来关闭文件。

  fopen前面的是文件名,后面需要一些特定的字符串才可以,而fclose只需要关闭文件指针变量即可。

文件读写操作

我们仅仅知道怎么打开和关闭文件是不行的,我们还应知道怎么进行文件读写。

上面的就是常用的文件操作函数

下面我们实际操作下:

把数字0~9写入文件:

int main(){FILE *p = fopen("胡杨.dat", "w");if (NULL == p){perror("main:");exit(-1);}for (char i = '0'; i <= '9'; i++){fputc(i,p);}fclose(p);p = NULL;return 0;}

 

其中打开文件使用只写的形式 "w" ,写入字符使用了fputs函数,然后用了循环把0~9每个字符分别插入文件。

 读出文件的内容

int main(){FILE *p = fopen("胡杨.dat", "r");if (NULL == p){perror("main:");exit(-1);}char a[15] = { 0 };fgets(a, 11, p);puts(a);fclose(p);p = NULL;return 0;}

 这里有个小问题,为什么fgets函数中要使用11呢?一共就10个数字,要读11次?

因为默认拷贝 '\0' ,就是把字符串结束标志也拷贝啦,可以通过调试看出来。

 可以看出,如果是拷贝10个时,那么就只拷贝到8就停止啦,也就是最后一个会默认拷贝 '\0'

所以使用fgets时,要比实际拷贝的元素多1,也就是说,你要拷贝10个元素,那么fgets中应该写11。

以二进制读写

我们想在文件中写入一些保密的文件,可以在文件中以二进制写入。

下面我们以结构体为例,是为了方便观察:

typedef struct stu{char name[20];int age;int ID[10];}stu;int main(){FILE *p = fopen("树下.dat", "wb");if (NULL == p){perror("main:");exit(-1);}stu s1 = { "胡杨树下", 18, { 1, 2, 3, 4, 5, 6, 7, 8, 9 } };fwrite(&s1, sizeof(s1), 1, p);fclose(p);return 0;}

 二进制写入,我们看不懂,但是文件是知道的

让我们用二进制打开的。

int main(){FILE *p = fopen("树下.dat", "rb");if (NULL == p){perror("main:");exit(-1);}stu s2 = { 0 };fread(&s2, sizeof(s2), 1, p);fclose(p);return 0;}

 这样可以通过,二进制读出,文件是记得。

注意事项

1.首先我们要知道一个文件进行操作时,首先要考虑打开方式,是只读还是只写还是其他的方式。

2.判断文件是否打开成功

3.要在判断怎么写入文件,是逐个输入还是按行输入,或者输出,这些使用的函数不一样。

4.在最后要关闭文件

下期预告:

下期接着讲解文件系列的知识。

下期精彩~!~!~!

 

 

艺术字体转换器