------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
一、什么是文件
文件有不同的类型,在程序设计中,主要用到两种文件:
1)程序文件(ASCII码文件) 包括源文件(.c)、目标文件(.obj)、可执行文件(.exe)等。
2)数据文件 文件内容不是程序,而是供程序运行时读写文件。
为了简化用户对输入输出的设备的操作,使用户不必去区分各种输入输出设备之间的区别,操作系统把各种设备都统一作为文件的处理。
文件一般指存储在外部介质上得数据的集合。
二、文件名
一个文件件要有一个唯一的文件标识,以便用户识别和引用。
文件标识包括3部分:
1)文件路径
2)文件名主干
3)文件后缀
三、文件指针
每个被使用的文件都在内存中开辟了一个相应的文件信息去,用来存放文件的信息。这些信息保存在一个结构体变量中。该结构体由系统声明,取名FILE
定义文件类型的指针变量:
FILE *文件指针名
四、文件的打开和关闭
用fopen函数打开文件
使用格式:
fopen(文件名,使用文件方式);
使用文件方式:
1)“r” 只读 打开一个只存在的文件,准备从文件中读取数据,不能写入。
2)“w” 只写 创建一个新文件,准备写入数据,不能读,如果文件存在则覆盖。
3)“a” 追加 打开一个已存文件,在尾部追加信息,不能读。如果不存在,则创建并加入。
4)“r+” 读写 创建新文件,重名覆盖。
5)“w+” 读写 创建新文件,重名覆盖。
6)“a+” 读写 追加数据信息
7)“t” 打开文本文件
8)“b” 打开二进制文件
用fclose关闭文件
使用格式:
fclose(文件指针名);
例:
FILE *fp;
fp = fopen("a1","r");
fclose(fp);
*使用此函数必须调用stdio.h头文件
四、顺序读写数据文件
fgetc函数:从文件指针指向的文件读入一个字符
返回值:读成功返回所读字符,失败返回结束标志EOF
调用格式:
fgetc(文件指针名);
fputc函数:把字符写到文件指针所指向的文件中
返回值:输出成功返回输出的字符,失败分那会结束标志EOF
调用格式:
fputc(字符,文件指针名);
例:
#include <stdio.h>
int main(int argc, const char * argv[]) {
//定义字符
char ch;
//定义文件指针
FILE *fp = fopen("av.txt", "w+");
//判断是否指向成功
if (fp!=NULL) {
//输入字符串
printf("请输入一个字符串:\n");
ch = getchar();
//字符计数器
int count = 0;
//
while (ch!='\n') {
count ++;
fputc(ch, fp);
ch = getchar();
}
printf("您总共收入了%d个字符\n",count);
}
rewind(fp);
ch = fgetc(fp);
while (ch!=EOF) {
putchar(ch);
ch = fgetc(fp);
}
fclose(fp);
printf("\n");
return 0;
}
fgets函数:从文件指针指向的文件读入一个规定长度的字符串,存入字符数组
返回值:成功返回地址,失败返回NULL
使用格式:
fgets(字符串指针,字符串长度,文件指针);
fputs函数:把字符串指针指向的字符写入文件指针指向的文件中
返回值:输出成功返回0,否则返回非0值
使用格式:
fputs(字符串指针,文件指针);
例:
#include <stdio.h>
int main(int argc, const char * argv[]) {
char a[50] = {"my name is Ace!"};
int count = 0;
FILE *fp = fopen("ace.txt", "w+");
if (fp!=NULL) {
count = fputs(a, fp);
printf("写入成功,本次写入了%d个字符!\t",count);
}
printf("\n");
rewind(fp);
fgets(a, sizeof(a), fp);
printf("文件中的信息为%s\n",a);
fclose(fp);
return 0;
}
fscanf和fprintf函数:格式化读写函数
使用格式:
fscanf(文件指针名,格式字符串,输入表列);
数据块读写函数:
fread函数:读取文件中的数据
fwrite函数:将文件写入文件
使用格式:
fread(buffer,size,count,fp);
fwirte(buffer,size,count,fp);
在fwrite中表示存放输出数据的首地址
size:表示数据块块数
count:表示要读写的数据块块数
fp:文件指针
例:
#include <stdio.h>
struct Students{
char name[21];
int age;
float score;
};
int main(int argc, const char * argv[]) {
//定义结构体数组
struct Students stu[3] = {{"瓦王",40,90.22f},{"地狱咆哮",55,95.12f},{"吉安娜",30,70.98f}};
//打开文件指针
// int j = sizeof(struct Students);
// printf("%d\n",j);
FILE *fp = fopen("wow.data", "wb+");
if (fp!=NULL) {
//写入数据
for (int i=0; i<3; i++) {
fwrite(&stu[i], sizeof(struct Students), 1, fp);
}
printf("写入成功!\n");
//接收文件数据
rewind(fp);
struct Students stu2[3];
for (int i=0; i<3; i++) {
fread(&stu2[i], sizeof(struct Students), 1, fp);
}
for (int i=0; i<3; i++) {
printf("姓名:%s 年龄:%d 战力:%.2f\n",stu2[i].name,stu2[i].age,stu2[i].score);
}
}
//结束文件指针
fclose(fp);
return 0;
}
rewind函数:将文件指向文件开头
使用格式:
rewind(文件指针);