之前经常遇到C语言中文件的操作,经常因奇奇怪怪的函数而感到一头雾水,终于今晚有幸上了下程序设计基础课,对文件的操作有了一次系统性学习的体验,下面就稍作记录,以便查阅

文件类型指针

typedef struct
{ short level; //缓冲区“满”或“空”的程度
unsigned flags; //文件状态标志
char fd; //文件描述符
unsigned char hold; //如缓冲区无内容不读取字符
short bsize; //缓冲区的大小
unsigned char*buffer; //数据缓冲区的位置
unsigned char*curp; //文件位置标记指针当前的指向
unsigned istemp; //临时文件指示器
short token; //用于有效性检查
}FILE;

FILE *fp;//定义一个指向FILE类型数据的指针变量

用fopen函数打开数据文件

FILE*fp;

//定义一个指向文件的指针变量fp

fp=fopen(″a1″,″r″);

//将fopen函数的返回值赋给指针变量fp

(C语言)文件操作_数据


用fclose函数关闭数据文件

fclose(fp);顺序读写数据文件

读写字符

(C语言)文件操作_文件指针_02


读写字符串

(C语言)文件操作_文件指针_03


用格式化的方式读写文本文件

fprintf(文件指针, 格式字符串, 输出表列);

fscanf(文件指针, 格式字符串, 输出表列);

例如:
fprintf (fp,″%d,%6.2f″,i,f); //将int型变量i和float型变量f的值按%d和%6.2f的格式输出到fp指向的文件中
fscanf (fp,″%d,%f″,&i,&f);
//磁盘文件上如果有字符“3,4.5”,则从中读取整数3送给整型变量i,读取实数4.5送给float型变量f

用二进制方式向文件读写一组数据
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);

buffer: 是一个地址。对fread,它是用来存放从文件读入的数据的存储区的地址。对fwrite,是要把此地址开始的存储区中的数据向文件输出(以上指的是起始地址)。
size: 要读写的字节数。
count: 要读写多少个数据项(每个数据项长度为size)。
fp: FILE类型指针。

例如:
float f[10];
fread(f,4,10,fp); //从fp所指向的文件读入10个4个字节的数据,存储到数组f中

随机读写数据文件
rewind(文件指针);
使文件位置标记指向文件开头,无返回值

fseek(文件类型指针, 位移量, 起始点);
用fseek函数改变文件位置标记
“起始点”:用0,1或2代替,0代表“文件开始位置”,1为“当前位置”,2为“文件末尾位置”
“位移量”:指以“起始点”为基点,向前移动的字节数(长整型)

例如:

(C语言)文件操作_字符串_04


用ftell函数测定文件位置标记的当前位置

ftell函数的作用是得到流式文件中文件位置标记的当前位置,用相对于文件开头的位移量来表示。如果调用函数时出错(如不存在fp指向的文件),ftell函数返回值为-1L。

例如:

(C语言)文件操作_指针_05


上述就是一些实用的文件操作,当然最好的方式就是通过实例来加以练习,后续会根据老师的大作业上传一些练习的源码,为避免撞车,会在大作业上交之后再上传,敬请期待~