C语言之标准文件操作

主要介绍一下C语言文件操作的api。

文件指针与文件开关

FILE * p;文件指针,可以直接操作文件中的内容。
fopen(dir,type);打开一个文件,返回文件指针,指向文件中的第一个位置。
fclose(p);关闭文件
p = NULL;使用完,注意将文件指针赋值为NULL,不让其成为野指针。

int main(){
    FILE * p;
    p = fopen("d://a.txt","r");
    if(p == NULL){
        printf("文件打开失败\n");
        exit(-1);
    }
    fclose(p);
    p = NULL;   
    return 0;
}

文件打开类型

文件打开类型有多种,最常用的几种有
r,只读的方式打开一个文本文件,不存在则打开失败
w,只写的方式打开一个文件,不存在则创建
a,追加的方式打开一个文件,不存在则创建
r+,读写的方式,不存在则打开失败
w+,读写方式打开或者新建一个文件,允许读写。
a+,读写方式打开文本文件,在文本末尾追加数据,不存在则创建一个。
ab,追加的方式打开一个二进制文件,不存在则打开失败。
rb,读的方式打开一个二进制文件,不存在则打开失败。
wb,写的方式打开一个二进制文件,不存在则创建。
上面有的多,但是事实上,却很好记忆,你只要认识3个单词,read,write,append即可

常用操作文件的函数

fgetc(p) != EOF;读取一个字符,这里的EOF事实上就是常量-1

int main(){
    FILE * p;
    if((p = fopen("d://a.txt","r")) == NULL){
        printf("文件打开失败\n");
    };
    char c[100];
    int i = 0;
    while((c[i] = fgetc(p)) != EOF){
        i++;
    }
    c[i] = '\0';
    printf("%s",c);
    fclose(p);
    p = NULL;
    return 0;
}

fputc(c,p);写出一个字符,c为字符,p为文件指针。

char s[] = "qwe";
int length = strlen(s);
int index = 0;
while(index < length){
    fputc(s[index ++],p);//p为文件指针
}

ftell(p);获取当前文件的指针的位置
fseek(p,0L,SEEK_END);设置当前文件指针的位置,这里有三个参数,第一个参数是文件指针,第二个参数是便宜量,第三个参数是,设置的位置
通常的,我们通过文件指针来获取到文件的体积

int curIndex = ftell(p);
fseek(p,0L,SEEK_END);
int lastIndex = ftell(p);
int length = lastIndex - curIndex;
feek(p,curIndex,SEET_SET); //将文件指针设置回原位置

fwrite(&node,sizeof(Node),1,p);
这里4个参数,第一个参数,将存放哪个结构体,第二个参数是结构体的大小,第三个参数是准备存放几个结构体,p是文件指针。写入成功返回1。
fread(&node,sizeof(Node),1,p);第一个参数是准备存放到哪个结构体,其他参数跟fwrite的意义是一样的。这个函数读取成功返回1。

typedef struct Student {
    int age;
    char * name;
    int c;
    int d;
}Student;

void writeTest() {
    Student s;
    s.age = 1;
    s.c = 1;
    s.d = 1;
    s.name = (char *)malloc(10);
    strcpy(s.name, "abcde");
    FILE * f;
    if ((f = fopen("D://a.dat", "wb")) == NULL) {
        printf("程序打开失败\n");
        exit(-1);
    }
    fwrite(&s, sizeof(s), 1, f);
    fwrite(s.name, 10, 1, f);
    fclose(f);
    f = NULL;   
    free(s.name);
}

void readTest() {
    Student s;
    FILE * p;
    if ((p = fopen("D://a.dat", "rb")) == NULL) {
        printf("程序打开失败\n");
        exit(-1);
    }
    fread(&s, sizeof(s), 1, p);
    s.name = (char *)malloc(10);
    fread(s.name, 10, 1, p);
    printf("%s", s.name);
    free(s.name);
    fclose(p);
    p = NULL;
}

fputs(str,f);//两个参数,第一个参数是将要存的字符串的指针,第二个参数是文件指针,直接输出str中的所有字符串,输出完成之后不会输出换行符。注意这里与puts的区别。

void fputsTest() {
    FILE * f;
    if ((f = fopen("d://a.txt", "w")) == NULL) {
        printf("文件打开失败\n");
        exit(1);
    }
    const char * str = "hello word";
    const char * str2 = "abc";
    fputs(str, f);
    fputs(str2, f);
    fclose(f);
    f =`
NULL;
}

fgets(str,length + 1,f);这里三个参数,第一个参数是存放到哪个字符串,第二个参数是读取几个字节,注意这里要写成读取的字节数+1,原因是最后加一个’\0’,第三个参数是文件指针。同时应该注意到的一点是,汉子是占2个字节占2个字节。

void fgetsTest() {
    FILE * f;
    if ((f = fopen("d://a.txt","r")) == NULL) {
        puts("文件打开失败");
        exit(1);
    }
    char s[200];
    fgets(s, 5,f);
    puts(s);
    fclose(f);
    f = NULL;
}

重点掌握,fgetc,fputc,fread,fwrite;4个函数

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值