C经典 文件的操作

来源:互联网 发布:淘宝网店手机版 编辑:程序博客网 时间:2024/05/21 18:44

一、常用函数
这里写图片描述

二、文件指针,指向文件的指针
FILE *fp;

三、文件的打开与关闭
FILE *fp = fopen(文件名,使用文件方式)
如:FILE *fp = NULL;
fp = fopen(” file.txt”,”r”);//r 表示读文件

int result = fclose(fp) ;// =0,如果不等于0,表示发生错误

四、读写方式
这里写图片描述

五、补充:
\0 :表示字符串结束
\n :表示回车换行
EOF :表示文件的末尾

六、关于中文读取
因为一个汉字占三个字节,一个字节等于8位
在C语言里每个字符串结束时都以\0
所以在读取的时候不能只读三个,会乱码

FILE *fp = fopen(“a.txt”,”r”);
//a.txt里存放的是中文
错误代码如:

char ch[3] ;fgets(ch,3, fp);printf("%s\n",ch);

正确代码如:

char ch[4] ;fgets(ch,4, fp);printf("%s\n",ch);

七、示例代码1

#include <stdio.h>#include <string.h>int main(int argc, const char * argv[]){   //定义文件指针    FILE *fw = NULL;    fw = fopen("a.txt", "w");    char ch[7] = "abcdefg";    if (fw != NULL) {        //写入        for(int i = 0 ; i <strlen(ch); i ++ ){            printf("%c\t",ch[i]);            fputc(ch[i], fw);        }    }else{        printf("写入失败!");        getchar();        exit(1);    }    printf("\n");    FILE *fr = NULL;    fr = fopen("a.txt", "r");    if(fr != NULL){        char c = fgetc(fr);        //读取        while(c != EOF){            putchar(c);            c = fgetc(fr);        }    }else{        printf("读取失败!");        getchar();        exit(1);    }    //fclose(fw);    //fclose(fr);    printf("\n");    return 0;}

七、示例代码2

#include <stdio.h>#include <string.h>int main(int argc, const char * argv[]){   //定义文件指针    FILE *fp = NULL;    fp = fopen("a.txt", "a+");        if (fp != NULL) {        //写入        printf("请输入字符");        char ch = getchar();        int count = 0;        while(ch !='\n'){            count ++;           fputc(ch,fp);           ch = getchar();        }        fclose(fp);        printf("\n");           //把指针移到开始位置        rewind(fp);        //读取数据        ch = fgets(fp);        while(ch != EOF){            putchar(ch);            ch = fgets(fp);        }    }else{        printf("写入失败!");        getchar();        exit(1);    }    printf("\n");    return 0;}

八、fread与fwrite函数
1)fread(buffer,size,count,fp);
2)fwrite(buffer,size,count,fp):
这里写图片描述

示例代码:
fwrite写入数据

FILE *fp =fopen("a.txt","wb");if(fp !=NULL){    char *ch = "kkkkkkk\n";    fwrite(ch,1,strlen(ch),fp);    fwrite(ch,1,strlen(ch),fp);}else{     printf("写入失败!");        getchar();        exit(1);}fclose(fp);

fread读取数据

FILE *fp =fopen("a.txt","rb");if(fp !=NULL){    char ch[100];    fread(ch,1,sizeof(ch),fp);    printf("%s\n",ch);}else{     printf("写入失败!");        getchar();        exit(1);}fclose(fp);

九、结构体的读写

#include <stdio.h>struct Student{    char name[20];    int age;    float score;};int main(int argc, const char * argv[]){    // 定义数组    struct Student stu[3] ={{"tom",22,89},{"kite",34,67},{"jelly",21,90}};    FILE *fp = fopen("stu.data", "wb+");    if(fp !=NULL){    for(int i =0; i < 3; i++){        fwrite(&stu[i],sizeof(struct Student),1,fp);    }    printf("写入成功!\n");    rewind(fp);    struct Student s[3];    for(int i = 0; i < 3; i++){        fread(&s[i],sizeof(struct Student),1,fp);        printf("%s\t",s[i].name);    }    }    fclose(fp);    printf("\n\n");    return 0;}

十、fscanf和fprintf的用法
这里写图片描述
示例1

#include <stdio.h>int main(int argc, const char * argv[]){    // 写入 9##2;到文件 test.txt    int a = 9;    int b = 2;    FILE *fp = fopen("text.txt","w+");    if(fp != NULL){        fprintf(fp, "%d##%d;", a,b);        rewind(fp);        int m=0;        int n=0;        fscanf(fp, "%d##%d;",&m,&n);        printf("m=%d,n=%d",m,n);    }    printf("\n");    return 0;}

示例2

#include <stdio.h>/**  读写如下文件 1,2# 3,4# 5,6# */int main(int argc, const char * argv[]){    // 定义数组    char ch[3][2] = {1,2,3,4,5,6};    //定义指针    FILE *fp = fopen("a.txt", "w+");    //    if (fp!=NULL) {        //写入        for (int i = 0; i <3; i ++) {            fprintf(fp, "%d,%d#",ch[i][0],ch[i][1]);        }        printf("写入成功\n");        rewind(fp);        //读取        int arr[3][2];        for (int i = 0; i <3; i ++) {            fscanf(fp, "%d,%d#",&arr[i][0],&arr[i][1]);            printf("%d,%d",arr[i][0],arr[i][1]);        }    }    fclose(fp);    return 0;}

十一、文件随机读取,定位fseek
fseek(fp,curPosition,headPosition);
如:fseek(fp,100L,0);

文件首:SEEK_SET 0
当前位置:SEEK_CUR 1
文件尾部:SEEK_END 2
示例:读取第二个学生的成绩

#include <stdio.h>struct Student{    char name[20];    int age;    float score;};int main(int argc, const char * argv[]){    // 定义数组    struct Student stu[3] ={{"tom",22,89},{"kite",34,67},{"jelly",21,90}};    FILE *fp = fopen("stu.data", "wb+");    if(fp !=NULL){    for(int i =0; i < 3; i++){        fwrite(&stu[i],sizeof(struct Student),1,fp);    }    printf("写入成功!\n");    //定位到第二个学生    fseek(fp,sizeof(struct Student),SEEK_SET);    fread(&stu,sizeof(struct Student),1,fp);    printf("%s\t",stu.name);    }    }    fclose(fp);    printf("\n\n");    return 0;}
0 0
原创粉丝点击