十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
FILE *fp;
fp = fopen("test.txt", "r"); //以读的形式打开文本文件
if (fp == NULL)
{exit(0);
}
文本文件
r 只读 r+ 读写
w 只写 w+ 读写
a+ 读写尾部添加
二进制文件
rb 只读 rb+ 读写
wb 只写 wb+ 读写
ab 尾部添加 ab+ 读写尾部添加
fclose(fp);
char ch;
//写 - fputc()
ch = getchar();
while ( ch != '$' )
{fputc(ch,fp); //把ch变量的字符值写往文件
ch = getchar();
}
//读 -fgetc()
ch = fgetc(fp); //从文件里读取一个字符
while ( ch != EOF ) //判断文件是否读完,未完,则继续执行读操作
{putchar(ch); //将字符送到屏幕
ch = fgetc(fp);
}
putchar(10); //换行
//读 - fgets()
char ch[41], *cp;
cp = fgets(ch, 41, fp); //从文件中读取一行字符串,不得超过40字节(还有一个字节是'\0')
while ( cp != NULL )
{printf("%s", ch);
cp = fgets(ch, 40, fp);
}
//写 - fputs()
char ch[5][41], *cp;
int i;
for ( i = 0; i< 0; i++ )
{gets(ch[i]); //将一个字符串放到数组中
}
for ( i = 0; i< 5; i++ )
{fputs(ch[i], fp); //将一个字符串写往文件
fputs("\n", fp); //在文本文件中换行
}
fscanf() 把从文本文件中读出的字符串按指定的格式转换为相应类型变量的值(不只是字符型)
fprintf() 把变量的值按指定的方式转化为文本写往文本文件
fscanf(文本指针,格式控制字符串,输入项的地址列表);
其返回值是事实上已赋值的变量的个数,如果未进行分配,则返回EOF
fprintf(文本指针,格式控制字符串,输入项的列表);
其返回值是正确写入文件的字节数,否则返回负数
int main(void)
{char name[9];
FILE *fp;
int age, i, num=0;
float score;
fp = fopen("student.txt", "w"); //以写的形式打开文件
if ( fp == NULL )
exit(0);
for ( i = 0; i< 3; i++ )
{printf("请输入学生_%d的姓名,年龄,成绩:", i+1);
scanf("%s%d%f", name, &age, &score);
fprintf(fp, "%s %4d %6.2f\n", name, age, score); //将变量数据写往文件
}
fclose(fp);
fp = fopen("student.txt", "r"); //以读的形式打开文件
printf("从文件中读出的学生数据:\n");
i = fscanf(fp, "%s%d%f", name, &age, &score); //利用scanf的返回值来判断读是否成功
while ( i == 3 )
{printf("学生_%d的姓名,年龄,成绩:", ++num);
printf("%s %4d %6.2f\n", name, age, score); //将数据打印到屏幕上
i = fscanf(fp, "%s%d%f", name, &age, &score);
}
fclose(fp);
return 0;
}
数据块读写文件在读写过程中不对数据进行转换,直接在内存与文件之间进行数据拷贝;
读写过程中不需考虑数据的性质和类型,只是简单对存储空间进行复制
fread(buffer,size,count,fp);
fwrite(buffer,size,count,fp);
buffer:对应一个连续内存数据区的起始地址,通常是一个指针值
size:欲复制的一个数据块的大小(字节数)
count:本次欲复制多少个数据块
fp:指向读写文件的文件指针
int feof(FILE *fp)
用于在进行读文件时,检测是否读写文件所有数据,如果文件结束,则返回非0值,反之返回0
while (!feof(fp)) {}
int main(void)
{FILE *fp1, *fp2;
char data;
fp1 = fopen("stu.txt", "rb");
fp2 = fopen("stu_copy.txt", "wb");
if ( fp1 == NULL || fp2 == NULL )
exit(0);
fread(&data, sizeof(char), 1, fp1); //读一个字节的内容给变量data
while ( !feof(fp1) )
{fwrite(&data, sizeof(char), 1, fp2); //将data的内容写到fp2
fread(&data, sizeof(char), 1, fp1);
}
fclose(fp1);
fclose(fp2);
return 0;
}
fseek(),可以将文件位置指针移动到指定的位置
int fseek(FILE *fp,long 位移量, int 起始点);
起始点参数:0 文件开始位置; 1 文件当前位置; 2 文件末尾位置
位移量: 值为正时,指针向后移动;值为负时,指针向前移动;若是long型,则100L
rewind(FILE *fp) 是使文件的文件位置指针重新指向文件开始的位置
fflush(stdin); 清空输入缓存区,保证下面的scanf()读新的循环条件
ftell(FILE *fp) 用于获取文件位置指针当前值
ferror(FILE *fp) 用于测试给定文件指针指向的文件信息区的错误标识符
cleareer(FILE *fp) 使文件错误标志和文件结束标志置为0
你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧
创新互联长期为上千家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为通辽企业提供专业的网站建设、网站设计,通辽网站改版等技术服务。拥有十余年丰富建站经验和众多成功案例,为您定制开发。