黑马程序员——C语言——文件读写

来源:互联网 发布:淘宝直播间怎么开 编辑:程序博客网 时间:2024/05/18 09:02

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------


1. 文件概念和分类

文件:存储在外部介质上数据的集合,这个数据集有一个名称叫做文件名。

文件分类

ASCII文件(文本文件):存放每一个字符对应的ASCII值,把ASCII值转换成二进制保存。

二进制文件:按二进制编码的方式存储文件。

文件操作步骤:

引入头文件(stdio.h)

定义文件指针

打开文件

文件读写

关闭文件


2. 文件的打开与关闭

在C语言中用一个指针变量指向一个文件

FILE *指针变量标示符    eg:FILE  *fp;

文件的打开——fopen

FILE *fopen(文件名,文件打开方式);//打开成功,返回文件首地址,打开失败返回null

文件关闭函数——fclose

int fclose(文件指针变量);   //有错返回非0,否则返回0


fputc(char ch,FILE *p);   //将字符ch写入到fp指向的文件中

fgetc(FILE *p);   //从fp指向的文件中读取一个字符

r:打开一个已经存在的文本文件,准备读取数据,不能写入数据

w:创建一个新文件,准备向里面写入数据,不能从文件读取数据,如果文件已经存在,则文件将会被覆盖

a:向文本文件尾追加数据,不能从文件中读取数据,如果文件不存在则创建文件

r+:打开一个已经存在的文件,准备读写

w+:创建一个新文件,向里面读写数据,如果文件已经存在则覆盖原文件

a+:向文本文件尾追加数据,可以从文件读取数据

t:打开一个文本文件

b:打开一个二进制文件

示例代码:

//从键盘输入一个字符串,写到文件中,再显示到屏幕上int main(int argc, const char * argv[]) {    //定义一个文件指针    FILE *fp=NULL;    //用读写方式打开文件    fp=fopen("eva.txt", "w+");    if (fp!=NULL) {        printf("请输入要写入文件的字符串:");        //从键盘输入一个字符        char ch=getchar();        while (ch!='\n') {            fputc(ch, fp);            //继续从键盘输入字符            ch=getchar();        }    }else{        printf("文件打开失败!");    }    //把文件内部指针重新指向文件首地址    rewind(fp);    //从文件中读取一个字符    char ch=fgetc(fp);    //如果文件没有结束把读取的字符输出    while (ch!=EOF) {        putchar(ch);        //继续读取下一个字符        ch=fgetc(fp);    }    fclose(fp);           return 0;}

字符串读写函数

fputs(字符串,指针); //把字符串写入到指针变量指向的文件中,返回值是写入的字符串的长度

fgets(char *buf,int n,FILE *fp);   //从指针变量fp指向的文件中读取长度为n-1的字符串保存到起始地址为buf的内存空间中。

示例代码如下:

//从键盘输入一个字符串,写到文件中,再显示到屏幕上int main(int argc, const char * argv[]) {    //定义一个文件指针    FILE *fp=NULL;    //以读写方式打开文件    fp=fopen("sally.txt", "w+");    //判断文件是否打开成功    if (fp!=NULL) {        char str[100];        printf("请输入要保存的字符串:");        //从键盘输入一个字符串        scanf("%s",str);        //把输入的字符串保存到文件中        fputs(str, fp);    }else{        printf("文件打开失败!");    }    //把文件内部指针重新指向文件首地址    rewind(fp);    char str1[100];    //从文件中读取出内容保存到字符数组中    fgets(str1, sizeof(str1), fp);    puts(str1);    fclose(fp);       return 0;}
注意:fgets从文件中读取字符串时遇到\n读取结束


数据块读取函数:

int fread(char *pt,unsigned size,unsigned n,FILE *fp);   //从fp指定的文件中读取n个长度为size的数据项,保存到pt指向的内存区

int fwrite(char *ptr,unsigned size,unsigned n,FILE *fp);  //把ptr所指向的n*size个字节写入到fp指向的文件中

示例代码如下:

/** 从键盘输入两个学生数据,写入一个文件中,再读取这两个学生的数据显示到屏幕上 */#include <stdio.h>#define LEN 100//定义一个结构体typedef struct Student{    char name[LEN];    int age;    int score;}MyStu;int main(int argc, const char * argv[]) {    MyStu stuent[2];    //从键盘输入学生信息    for (int i=0; i<2; i++) {        printf("请输入第%d个学生的姓名:",i+1);        scanf("%s",stuent[i].name);        printf("\n请输入第%d个学生的年龄:",i+1);        scanf("%d",&stuent[i].age);        printf("\n请输入第%d个学生的成绩:",i+1);        scanf("%d",&stuent[i].score);    }    //定义一个文件指针并打开文件    FILE *fp=fopen("a.txt", "w+");    if (fp!=NULL) {        //把学生信息写到文件中        for (int i=0; i<2; i++) {            fwrite(&stuent[i], sizeof(MyStu), 1, fp);        }    }    //把文件内部指针重新指向文件首地址    rewind(fp);    //定义一个结构体数组    MyStu stu[2];    for (int i=0; i<2; i++) {        //把从文件中读取出的信息保存到结构体中        fread(&stu[i], sizeof(MyStu), 1, fp);        printf("\n第一个学生信息是:%s\t%d\t%d\t",stu[i].name,stu[i].age,stu[i].score);    }    //关闭文件    fclose(fp);        return 0;}

格式化读写函数

fscanf(文件指针,格式字符串,输入列表);//按指定格式把数据从文件中读出

fprint(文件指针,格式字符串,输出列表);  //按指定格式把数据写入文件

示例代码如下:

/** *使用fprintf和fscanf向文件中写入一个二维数组,并读取出来 */#include <stdio.h>int main(int argc, const char * argv[]) {    int a[3][3]={1,2,3,4,5,6,7,8,9};    //定义一个文件指针并打开    FILE *fp=fopen("fprintf.txt", "w+");    //判断文件是否打开成功    if (fp!=NULL) {        for (int i=0; i<3; i++) {            fprintf(fp, "%d,%d,%d#",a[i][0],a[i][1],a[i][2]);        }    }    //把文件内部指针移到文件首    rewind(fp);    //定义一个数组接收从文件中读取的数据    int b[3][3];    for (int i=0; i<3; i++) {        fscanf(fp, "%d,%d,%d#",&b[i][0],&b[i][1],&b[i][2]);    }    //打印出二维数组中的数据    for (int i=0; i<3; i++) {        for (int j=0; j<3; j++) {            printf("%d\t",b[i][j]);        }    }    return 0;}



0 0
原创粉丝点击