C语言笔记——文件操作
一、文件操作基本知识
c语言文件的操作分 "读"和“写”
1.读 指的是:将文件内的信息写入到程序,可以理解为
硬盘信息->内存信息 的转化方式
2.写指的是:将程序中的信息写入到文件,如txt文件。是一种
内存信息->硬盘信息 的转化方式
二、具体使用方法
1.定义文件变量
在C语言中,读文件的需要用到文件类型 FILE;
通常的使用方式为: FILE *fp; 定义一个文件指针;
2.打开一个文件
用指针打开文件的函数为:fp = fopen("mm.txt","w"));
w也可以是r,对应两种使用方式:w(write),r(read)。
如果是将信息写入文件,则是w。
若是将文件信息写入程序,则是r。
在r的方式时,即读文件的方式时,若打开的文件不存在,则会打开失败。
在w的方式时。即在写进文件的,比如将信息写入“cc.mm”这么一个文件里时,程序发现并没“cc.mm”那么一个文件,则会自动创建一个新文件 命名为“cc.mm”,将信息写入其中。注意!后缀名 .xx、.tet、.什么都无所谓,都默认按txt的方式写入。
3.函数的调用
文件的读取函数为:fwrite(p, sizeof(XX), 1, fp);
即将文件内的信息,按XX大小的内存(类型)写入指针P当中。通过函数调用之后,fp即文件指针自动后移。
文件写入的函数为:fprintf(fp,"%x",p );
即将p指针里的信息按照%x的格式写入文件中。
4.在最后一定要记得使用fclose(fp)!!!!关闭文件指针
三、示例
1.文件的写入
#include <string.h> #include <windows.h> #define NEW (TX *)malloc(sizeof(TX)) typedef struct tongxunlu //定义的一个通讯录的结构体 { char number[10]; //号码 char name[20]; //姓名 int old; //年龄 char address[20]; //地址 char phone[12]; //电话 struct tongxunlu *next;//链表 }TX; int main () { FILE *fp; // 文件指针fp TX *p; int i,n; // i,n控制循环 if((fp = fopen("学生信息.txt","w")) == NULL ) // 打开文件 { printf(" 人品 不够!!启动失败!!!\n"); exit(0); } printf("输入人数:"); // 键盘输入人数n scanf("%d",&n); fprintf(fp,"%d",n); // 将人数n写入文件 fprintf(fp,"\n"); p = NEW; // 开辟一个新内存,并让指针p指向它 printf(" 输入档案号、姓名、年龄、籍贯、联系电话\n"); for(i = 0; n > i ; i++) // 反复用同一个节点进行n次循环 { scanf("%s",&p -> number); // 键盘将数据写入该节点 scanf("%s",&p -> name); scanf("%d",&p -> old); scanf("%s",&p -> address); scanf("%s",&p -> phone); fprintf(fp,"%s ",p -> number); // 将该节点内的数据写入文件 fprintf(fp,"%s ",p -> name); fprintf(fp,"%d ",p -> old); fprintf(fp,"%s ",p -> address); fprintf(fp,"%s ",p -> phone); fprintf(fp,"\n"); } free(p); // 释放p内存 fclose(fp); // 关闭文件 printf("\n\n数据输入完成\n"); }
2.文件的读取
TX *setTX() { FILE *fp; // 文件指针fp用来打开文件 TX *head, *p, *q; // 结构体指针,用来建立链表 int i,n; // 整形i,n控制循环 if((fp = fopen("学生信息.txt","r")) == NULL ) // 用只读的方式打开文件 { printf(" 现无数 据请先输入数据!!!\n"); exit(0); } fscanf(fp,"%d",&n); // 从文件读取人数n head = NEW; // 给头结点head开辟一段内存 p = head ; for (i = 0;i < n ;i++) // for循环,进行n次构建节点 { q = NEW ; p -> next = q; fscanf(fp,"%s",&q -> number); // 将文件内的数据写入节点 fscanf(fp,"%s",&q -> name); fscanf(fp,"%d",&q -> old); fscanf(fp,"%s",&q -> address); fscanf(fp,"%s",&q -> phone); p = q; } q -> next = NULL; // 尾节点指向NULL fclose(fp); // 关闭文件 return head; // 返回所建立的链表的头结点 }

浙公网安备 33010602011771号