C语言 文件操作7--文件错误处理

//文件错误处理



#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<io.h>

//perror(s)函数: 用来将上一个函数发生错误的原因输出到标准设备(stderr)。参数 s 所指的字符串会先打印出,后面再加上错误原因字符串
//feof()函数:检测流上的文件结束符,如果文件结束,则返回非0值,否则返回0,文件结束符只能被clearerr()清除。
//ferror()函数:获取文件流状态,如果ferror返回值为0(假),表示未出错。如果返回一个非零值,表示出错。
//clearerr()函数:使文件错误标志和文件结束标志置为0。

void main(){
    //错误一:以写方式打开只读文件
    //定义文件路径
    char path[40] = "E:\\Look\\a.txt";
    //定义文件指针
    FILE *pf = fopen(path, "w");
    if (pf==NULL)
    {
        printf("文件打开失败!\n");
        perror("文件错误信息是");//perror()函数会输出参数s+“:”+具体文件错误信息
        //错误一;打印权限不够
    }
    else{
        fputs("今年在有没有齐天大圣了!!!",pf);
        //错误二:在w模式下,执行文件读操作
        //进行错误操作,开始读文件
        //将指针移动到文件开头
        rewind(pf);
        char ch = fgetc(pf);
        //fgetc()函数读取失败返回-1,读取到文件末尾返回-1;在fgetc()函数里的-1和EOF(end of file)等价
        if (ch==EOF)
        {
            //判断文件是否到了末尾
            if (feof(pf))//feof返回值为非0,表示到了文件末尾
            {
                printf("文件读取到了末尾\n");
                //重置文件流状态,清除错误信号
                clearerr(pf);
                //注:如果不重置文件流状态,那么下次读取该文件正确状态仍然会报这个错误
            }
            //判断文件是否报错
            if (ferror(pf))//ferror返回值为非0,意味着文件出错
            {
                printf("文件读取出错!\n");
                perror("文件错误2信息是");
                //重置文件流状态,清除错误信号
                clearerr(pf);
            }

        }
        else{
            printf("%c\n",ch);
        }
        //关闭文件指针
        fclose(pf);
        //注:为何将fclose()写在else里面,而不是外面?
        //因为如果文件打开失败,pf==NULL,空指针无法关闭,程序会报错
    }
    system("pause");
}

 

C语言 文件操作7--文件错误处理_第1张图片

你可能感兴趣的:(C语言 文件操作7--文件错误处理)