文件的结尾和文件开头

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件的结尾和文件开头相关的知识,希望对你有一定的参考价值。

c语言中文件的结尾指的是文件的最后一个字符的下一个字符

例如:文件a.txt中有三个字符abc,即文件大小为3

那么文件的实际内容如下图.

技术分享

echo -n abc > a.txt


#include <stdio.h>
#include <stdlib.h>

int main(void){
    FILE* fp = fopen("a.txt","r");
    if(NULL==fp){
        perror("fopen"),exit(-1);
    }
    int c;
    while(!feof(fp)){
        c = getc(fp);
        printf("c=%d\n",c);
        if(ferror(fp)){
            perror("ferror"),exit(-1);
        }
    }
    fclose(fp);
    return 0;
}

c=97

c=98

c=99

c=-1

上面的代码,会把文件结束符EOF也读出来(EOF是个宏,就是-1),

FILE类型中维护了两个标志,即出错标志和文件结束标志

如上,只有先读出了文件中的文件结束符EOF才能设定此文件文件结束标志

所以正确做法应该是

#include <stdio.h>
#include <stdlib.h>

int main(void){
    FILE* fp = fopen("a.txt","r");
    if(NULL==fp){
        perror("fopen"),exit(-1);
    }
    int c;
    while((c=getc(fp))!=EOF){
        printf("c=%d\n",c);
        if(ferror(fp)){
            perror("ferror"),exit(-1);
        }
    }
    return 0;
}

c=97

c=98

c=99



如何读出文件最后一个字符c,如下:

#include <stdio.h>
#include <sys/types.h>
#include <fcntl.h>
int main(void){
    FILE* fp = fopen("a.txt","r");
    fseek(fp,-1,SEEK_END);
    char c;
    c = getc(fp);
    printf("c=%d\n",c);
    fseek(fp,0,SEEK_END);
    printf("feof(fp)=%d\n",feof(fp));//此时在文件结尾处
    //即文件最后一个字符(即c字符)的下一个字符处
    //结果为0
    c = getc(fp); 
    printf("c=%d\n",c); //c=-1
    printf("feof(fp)=%d\n",feof(fp));//结果为1
    return 0;
}

c=99
feof(fp)=0
c=-1
feof(fp)=1

本文出自 “12208412” 博客,请务必保留此出处http://12218412.blog.51cto.com/12208412/1888412

以上是关于文件的结尾和文件开头的主要内容,如果未能解决你的问题,请参考以下文章

查找列表/文件中以特定前缀/后缀开头/结尾的所有单词

文件的结尾和文件开头

如何显示以某个字母开头和结尾的文件名?

vscode 用户代码片段 vue初始化模板 Snippet #新加入开头注释 自动生成文件名 开发日期时间等内容

Alamofire 文件上传出现错误“JSON 文本未以数组或对象开头,并且允许未设置片段的选项”

统计python文件中的代码,注释,空白对应的行数