码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2016-01-27 19:25:21      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:

//文件错误处理



#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--文件错误处理

标签:

原文地址:http://www.cnblogs.com/zhanggaofeng/p/5163985.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!