文件
(一)文件的概念
1、文件:文件是外存上数据的集合。
2、文件的分类:
①文本文件(ACSCII文件):每个字符存储到文件中/
②二进制文件:以二进制存储
C语言中对文件的存取以字符(字节)为单位
3、文件类型指针
FILE就是文件类型名,它是一个结构体类型,对一个文件的操作,通过文件的指针进行
FILE *fp,*in,*out;
学习文件的12个函数
(1)fopen()------打开文件
(2)读写8个函数------指针读写后自动下移
(3)fclose()------关闭文件
(4)文件定位指针
//文件类型指针
FILE *fp, *in, *out;
(二)文件的打开与关闭
1、文件的打开(fopen()函数)
格式:fopen(文件名, 文件使用方式)
功能:按指定的"使用方式"打开类型,函数返回所打开文件的指针,该指针的基类型为文件类型,
文件名和文件使用方式均为字符串。
打开文件的“使用方式”(小写字母)
"r"---------只读,打开已存在的文件,如过文件不存在,则失败,返回NULL
"w"-------刷新写,创建写,如果文件不存在则新创建一个文件
"a"(append)---------追加写,文件不在创建写
"+"---------增强功能
"a+"
"rb"
"wb"
"ab"
"rb+"
"wb+"
"ab+"
(加了b则表示二进制文件,无b则为文本文件)
//以只读的方式打开文件data.txt,并用指针变量fp指向它
FILE *fp;
fp = fopen("data.txt", "r");
if((fp = fopen(文件名, 文件使用方式))== NULL){
printf("can not open this file\b");
exit(0);
}
2、文件的关闭(fclose()函数)
文件使用完后应该关闭该文件
//格式:fclose(文件指针)
FILE *fp;
fclose(fp)
(1)fputc()----字符
格式:fputc(字符,文件指针)
功能:把一个字符写到文件指针所指的文件中,其中字符可以是字符常量也可以是字符变量
。若输出成功则函数返回输出的字符,若失败则返回EOF(stdio.h文件定义为-1)
(2)fgetc()----字符
格式:fgetc(文件指针)
功能:从文件指针所致文件中读取一个字符。若读取成功则函数返回读取的字符,失败(遇到文件结束)则
返回EOF
(3)fgets()------字符串
格式:fgets(str, n, fp);
功能:其中str表示一个字符指针,可以是字符数组名也可以是字符指针变量名。从fp所指文件中读取n-1个字符(不是n个字符)
并再这些字符的最后加一个字符串结束符'\0'后赋给str
函数返回str的首地址
(4)fputs()------字符串
格式:fputs(str, fp)
功能:向fp所指文件中写(输出)str中的字符串,str可以是字符串常量、字符数组或字符指针变量
再输出是字符串的结束符'\0'不输出,若输出成功则返回0,失败返回EOF
(5)fread()、fwrite()-------这两个函数按二进制的方式进行读写----块
格式:
fread(buffer, size, count, fp);
fwrite(buffer, size, count, fp);
其中:
buffer是数据的地址
size是每次读写的字符数
count表示让函数进行多少次的读写
fp是要进行读写的文件指针变量
功能:用来读写一个连续的数据块
注意:这两个函数按二进制的方式进行读写
(6)fprintf()、fscanf()-----格式
格式:
fprintf(文件指针,格式说明符,输出列表);
printf(格式说明符,输出列表)
fscanf(文件指针,格式说明符,输入列表);
scanf(格式说明符,输入列表);
功能:按格式说明符所指定的格式向文件中读写(输入输出)数据。其中格式说明符和输入/输出列表
的用法与scanf和printf函数相同。
补充:feof(文件指针)
作用是测试文件的当前读写位置是否在文件的末尾,若是则返回非0值(真),否则返回0(假)
//文件没有到末尾就要一直读下去
FILE *fp;
while(!feof(fp)){
}
(四)文件当前读写位置函数
(1)重新定位指针
格式:rewind(文件指针)
作用:使当前的读写位置重新指向文件的开头,函数无返回值
(2)fseek()
格式:fseek(文件指针,位移量(长整型100L),起始点)
位移量:要在数值后加字母l或者L。
功能:将当前的读写位置从"起始点"开始按"位移量"所指定的移动字节数向后移动
起始点右:
SEEK_SET 或 0 :表示文件的开始
SEEK_CUR 或1:表示当前位置
SEEK_END 或2:表示文件末尾
//将位置指针定位到离文件头50个字节的地方
FILE *fp;
fseek(fp, 50L, 0);
//将位置指针定位到离文件尾50个字节的地方
FILE *fp;
fseek(fp, -50L, 2);
//将位置指针定位到离文件头0个字节的地方
fp = fopen();//方法1
rewind(fp);//方法2
fseek(fp, 0L, 0);//方法3
(3)ftell()
格式:ftell(文件指针)
功能:返回当前文件的位置,用相对于文件头的位移量表示。若文件返回-1L表示出错
#include<iostream>
#include<cstdio>
using namespace std;
int main(){
int file_length;
FILE *fp;
fp = fopen();
fseek(fp, 0L, 2);
flie_length = ftell(fp);
fclose(fp);
return 0;
}
(4)exit()
功能:关闭当前打开的文件,结束程序运行