C语言 文件读写操作的相关知识整理

文件操作前置知识:

1、文件可以分为两种类型:

程序文件,这种文件的内容是程序代码。如源程序文件,目标文件,可执行文件等

数据文件,其内容不是程序,而是供程序运行时读写的数据。

注:1.所谓“文件”一般指存储在外部介质(如磁盘)上数据的集合。

2.终端即计算机的各种输入输出设备。操作系统把终端都统一作为文件来处理。例如:终端键盘是输入文件,显示屏和打印机是输出文件。例如从终端键盘读入,然后在显示屏输出

2、一个文件要有唯一的文件标识(文件名),以便用户识别和引用。文件标识包括3部分:

①文件路径②文件名主干③文件后缀如:

E:\C程序设计\源程序\ helloworld.cpp

↓ ↓ ↓

文件路径 文件名主干 文件后缀

3、数据文件

4、文件缓冲区

5、文件类型指针

每个被使用的文件都在内存中开辟一个相应的文件信息区,用来存放文件的有关信息(如文件的名字,文件状态及文件当前位置等)。这些信息是保存在一个结构体变量中。该结构体类型是由系统声明的,取名为FILE(在stdio.h中声明)

定义一个FILE类型的指针,然后使该指针指向某一个文件的文件信息区,那么我们就可以访问这个文件了

系统自定义了3个文件指针stdin,stdout,stderr分别指向标准输入流(键盘区的指针)、标准输出流(输出到屏幕的指针)、标准出错输出流(屏幕的指针)

6、常见的文件操作函数

①fopen函数:打开文件(打开是指为文件建立相应的信息区和文件缓冲区),fopen的调用方式为:fopen(文件名,文件使用方式); (fopen函数的返回值是一个FILE*类型的指针,即所创建的文件信息区的地址;如果打开失败会返回NULL)

如:FILE * fp = fopen(“a1”, “r”);

打开名字为“a1”的文件,使用文件方式“读入”(r代表read,即读入),其函数返回值是指向a1文件的指针fp(即a1文件信息区的开头地址),那么通过fp我们就可以访问这个文件。

②fclose函数:关闭数据文件(如果不关闭文件将会丢失缓冲区的数据),fclose的调用方式为:fclose(文件指针);(关闭文件指针所指向的文件;flose成功执行,返回0,否则返回EOF(EOF是宏名,值为-1))

③fgetc(fp)函数(也可写作getc):从fp指向的文件读入一个字符(一次只读一个,否则用while循环),读成功返回文件所读字符,读到文件末尾或者读取出错返回EOF.

④fputc(ch, fp)函数(也可写作putc):把单个字符ch写到文件指针变量fp所指向的文件中。输出成功返回值就是输出的字符,输出失败返回EOF(这个fputc可不是输出到屏幕上)

⑤文件读写检测函数:

ferror(fp);返回文件错误标志(代表文件读写时有没有出错)的值,返回值为0表示未出错,否则表示出错。

feof(fp);返回文件结束标志(代表对fp所指文件进行读写时,文件位置标记有没有到达文件末尾)的值,没有到达文件末尾,返回0,否则返回非0值(fgetc、fgets每读一次,文件位置标记都会随之移动!)

clearerr(fp);的作用是使fp所指向的文件的文件错误标志文件结束标志置为0(也就是说使用clearerr(fp)之后,在调用ferror和feof函数,他们的返回值都为0).该函数没有返回值

文件读写检测函数的正确使用方式:

编写一个ce函数,每当对文件进行读写操作之后,就要使用ce函数检测一下有没有读写错误,如果有就把这个错误清除

    void ce(FILE * p)                        
    {  
        if(ferror(p))  
        {  
            printf("文件读写出错\n");  
            clearerr(p);  
        }  
    } 

又如:

    while(!feof(p))                   //如果没有到达文件末尾,就继续读取:此种做法可以把文件中的全部内容读进来输出到屏幕上,只不过末尾会多输出一个值为EOF的文件结束符  
    {  
            putchar(getc(p));  
            ce(p);                         //每次读取后就检查一下,并把错误清除
    } 

⑥fgets(str, n, fp)函数:一次最多从fp指向的文件读入(n-1)个字符,最后自动加’\0’存放到字符数组str中;如果在读完(n-1)个字符之前,读到’\n’或者文件结束符EOF,读入结束,将所读字符,加’\0’存放到字符数组str中(如果对该函数用while,表示一次读入(n-1)个字符直到读完)读成功返回地址str,如果一开始就遇到文件尾或读数据失败则返回NULL(留意一个点:如果要读入中文,那么fgets的参数n得要是偶数,否则会出现乱码,因为一个中文占两个字节)

⑦fputs(str, fp)函数:把str所指向的字符串写到文件指针变量fp指向的文件中(不包含’\0’),输出成功返回0,否则返回一个非零值。(str可以是字符串常量)

⑧fscanf(fp,格式化输入符,&形参列表)函数和fprintf(fp,格式化输出字符,形参列表)函数

printf和scanf函数是向终端进行格式化输出、从终端输入。如果向文件进行格式化输出、从文件输入,则需要用到fprintf和fscanf函数。与fgets和fputs相似,每读到’\n’或者文件结束符EOF就到下一个格式化输入输出符,没有即读入结束,调用方式如下:

fprintf(文件指针,格式字符串,输出列表);

fscanf(文件指针,格式字符串,输出列表);

注:输入时要将文件中的ASCII码转换成二进制形式保存在内存变量中,在输出时又要将内存中的二进制形式转换成字符,要花费较多的时间。比较节省时间的是fread和fwrite函数

⑨fread(buffer, size, count, fp)函数和fwrite(buffer,size, count, fp)函数;

都是4个参数!!!fread:从fp所指向的文件中读数据,最多读取count个项,每个项size个字节,并把这些数据存放到以buffer为地址开头的内存块中,返回成功读取的项数。fwrite从fp所指向的文件中读数据,最多读取count个项,每个项size个字节,并把这些数据存放到以buffer为地址开头的内存块中

(对二进制文件进行读写时用fread和fwrite函数,文本文件最好不要用这两个函数进行读写)

⑩rewind(fp)函数:使fp所指向的文件的文件标记到文件的开头位置,此函数没有返回值;fseek(文件类型指针,位移量,起始点)函数。fseek(p,0L,0)与rewind(p)等价:初始位置0,偏移0字节

(通过学习b站 织码匠 后重新整理)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值