C的数据文件由一连串的字符(或字节)组成,而不考虑行的界限,两行数据间不会自动加分隔符,对文件的存取是以字符(字节)为单位的。输入输出数据流的开始和结束仅受程序控制而不受物理符号(如回车换行符)控制,这就增加了处理的灵活性。这种文件称为流式文件。
一、打开与关闭文件 1.1 C语言用标准输入输出函数fopen来实现打开文件,fopen函数的调用方式为:
fopen(文件名,使用文件方式) //示例fopen( ” a1 “, ” r ” );
返回值:失败返回NULL
文件使用方式:
“r”(只读) “w”(只写) “a”(追加) “rb”(二进制只读) “wb”(二进制只写) “ab”(二进制追加)
“r+”(打开文本文件读写) “w+”(建立一个新的文本文件读写) “a+”(打开一个文本文件读写)
“rb+”(打开一个二进制文件读写) “wb+”(建立一个新的二进制文件读写) “ab+”(读写)
1.2 用fclose函数关闭数据文件
fclose函数调用的一般形式为 fclose(文件指针);
二、顺序读写数据文件 2.1 向文件读写字符 函数名调用形式返回值fgetcfgetc(fp)读成功,带回所读的字符,失败则返回文件结束标志EOF(即-1)fputcfputc(ch,fp)输出成功,返回值就是输出的字符;输出失败,则返回EOF(即-1) 2.2 向文件读写字符串 函数名调用形式返回值fgetsfgets(str,n,fp)读成功,返回地址str,失败则返回NULLfputsfputs(str,fp)输出成功,返回0;否则返回非0值
例:
char str[10];
fgets(str, 10, fp); //从fp指向的文件读入一个长度为9的字符串,并添加结束符‘’,存放到字符数组str中
2.3 用格式化的方式读写文件
fprintf(文件指针,格式字符串,输出表列)
fscanf(文件指针,格式字符串,输入表列)
例如:
fprintf( fp, “%d,%6.2f”, i, f); //返回值:失败则返回EOF
fscanf( fp, “%d,%f”, &i, &f);
2.4 用二进制方式向文件读写一组数据
fread( buff, size, count, fp); //返回值:成功则返回count的值
fwrite( buff, size, count, fp);
例如:
fread( f, 4, 10, fp); //从fp所指向的文件读入10个4个字节的数据,存储到数组f中
三、随机读写数据文件 3.1 文件位置标记的定位
(1) 用rewind函数使文件位置标记指向文件开头:rewind(fp)
(2) 用fseek函数改变文件位置标记:fseek(文件类型指针,位移量,起始点)
起始点名字用数字代表文件开始位置SEEK_SET0文件当前位置SEEK_CUR1文件末尾位置SEEK_END2
fseek函数调用例子:
函数调用作用fseek(fp, 100L, 0);将文件位置标记向前移到离文件开头100个字节处fseek(fp, 50L, 1);将文件位置标记向前移到离当前位置50个字节处fseek(fp, -10L, 2);将文件位置标记从文件末尾处向后退10个字节