C语言文件管理详解(上)
目录
(一)什么是文件
(二)文件的打开和关闭
(三)fopen函数编辑
(四)fseek函数
(五)ftell函数
(六)rewind函数
(一)什么是文件
内存里的数据是即时的,一旦设备断电就消失不见。为了保存内存里的数据,人们发明了磁盘等一系列永久性保存数据的存储器。而放在磁盘里的文件就是内存的数据。文件分为二进制文件和文本文件。我们知道,计算机的底层是由一个个0,1组成的数字,写一个文件若不加以转换,那这个就是二进制文件。二进制文件在文本编辑器是一堆看不懂的乱码。如果把二进制的数字用ASCII值转换的文件就是文本文件,是人可以看得懂的文件。⼀个数据在⽂件中是怎么存储的呢?字符⼀律以ASCII形式存储,数值型数据既可以⽤ASCII形式存储,也可以使⽤⼆进制形式存储。 如有整数10000,如果以ASCII码的形式输出到磁盘,则磁盘中占⽤5个字节(每个字符⼀个字节),而二进制形式输出,则在磁盘上只占4个字节。
(二)文件的打开和关闭
我们先来讲一个概念:流。数据通常在不同的输入输出设备中进行传输,为了方便描述数据的流动,我们抽象出一个流的概念。我们可以这样比喻流,流是江海中的流,里面流动的水就是传输的数据。C程序针对⽂件、画面、键盘等的数据输⼊输出操作都是通过流操作的。 ⼀般情况下,我们要想向流⾥写数据,或者从流中读取数据,都是要打开流,然后操作。我们打开文件的同时也会打开三个流。Stdin,Stdout,Stderr这三个流。Stdin意为标准输入,通常从键盘输入数据到外存。Stdout意为标准输出,通常从外存输出到显示器。Stderr意为标准错误流,一般输出到显示器。⽂件在读写之前应该先打开⽂件,在使⽤结束之后应该关闭⽂件。 在编写程序的时候,在打开⽂件的同时,都会返回⼀个FILE*的指针变量指向该⽂件,也相当于建⽴了 指针和⽂件的关系。 ANSI C 规定使⽤ fopen 函数来打开⽂件, fclose 来关闭⽂件。
//打开⽂件
FILE * fopen ( const char * filename, const char * mode );
//关闭⽂件
int fclose ( FILE * stream );
(三)fopen函数
头文件是<stdio.h>。该函数的第一个参数是一个指针,指向要打开的文件名(一个字符串),第二个参数是模式,用来说明打开这个文件要干什么。返回值是一个文件指针,指向一个文件。
(四)fseek函数
fseek函数的作用是偏移文件指针。根据⽂件指针的位置和偏移量来定位⽂件指针(⽂件内容的光标)。第一个参数要操作的文件指针,第二个参数是在文件指针的偏移量(注意是long int类型),第三个参数是文件指针的起始位置。注意的是,第三个参数通常有三个值。如果 fseek 执行成功,它会返回 0;如果失败,它会返回一个非 0 的值,并设置错误代码。
SEEK_SET;//文件的起始位置是开头
SEEK_CUR;//文件的起始位置是现在的文件指针的位置
SEEK_END;//文件的起始位置是文件的末尾
(五)ftell函数
ftell函数是用来说明现在的文件指针相对于文件开头的偏移量。返回值是偏移量。这个没有什么好讲的。要注意的是返回的值的类型是long int类型的。
(六)rewind函数
rewind函数的作用是让文件指针重新指向文件的起始位置。