基础函数
打开和关闭文件
fopen()
fopen(文件名,使用文件方式)
使用文件方式 | 描述 |
---|---|
r | 打开一个已有的文本文件,允许读取文件。 |
w | 打开一个文本文件,允许写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会从文件的开头写入内容。如果文件存在,则该会被截断为零长度,重新写入。 |
a | 打开一个文本文件,以追加模式写入文件。如果文件不存在,则会创建一个新文件。在这里,您的程序会在已有的文件内容中追加内容。 |
r+ | 打开一个文本文件,允许读写文件。 |
w+ | 打开一个文本文件,允许读写文件。如果文件已存在,则文件会被截断为零长度,如果文件不存在,则会创建一个新文件。 |
a+ | 打开一个文本文件,允许读写文件。如果文件不存在,则会创建一个新文件。读取会从文件的开头开始,写入则只能是追加模式。 |
若打开的是二进制文件,在其后方加入b即可。
如果打开失败,会返回NULL。
fclose()
fclose(文件指针)
如果成功关闭,则返回0,若关闭失败,返回EOF(-1)
用法
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *fp;
fp = fopen("test.txt","w+");
fclose(fp);
return 0;
}
顺序读写数据文件
fgetc()
fgetc(fp)
从fp指向的指针读取一个字符。每调用一次,fp后移一位。
读成功,返回所带的字符,失败则返回文件结束标志EOF(-1)
fputc()
fputc(ch,fp)
把字符ch写到文件fp指向的文件中。输出成功,返回该字符,否则返回EOF(-1)。
示例
示例1从键盘输入一些字符,逐个把他们送到磁盘上去,直到用户输入一个 # 为止。
#include <stdio.h>
#include <stdlib.h>
//从键盘输入一些字符,逐个把他们送到磁盘上去,直到用户输入一个 # 为止。
int main()
{
FILE *fp;
if((fp = fopen("test.txt","w+")) == NULL){
printf("打开失败\n");
exit(0);
}
char tmp;
tmp = getchar();
while(tmp!='#'){
fputc(tmp,fp);
tmp = getchar();
}
fclose(fp);
return 0;
}
注意scanf
和getchar
的区别。
示例2
将一个文件中的信息复制到另一个文件中。
#include <stdio.h>
#include <stdlib.h>
//将一个文件中的信息复制到另一个文件中。
int main()
{
FILE *fp1,*fp2;
if((fp1 = fopen("test.txt","r")) == NULL){
printf("文件1打开失败\n");
exit(0);
}
if((fp2 = fopen("test_copy.txt","w")) == NULL){
printf("文件2打开失败\n");
exit(0);
}
char tmp;
while((tmp = fgetc(fp1))!=EOF){
fputc(tmp,fp2);
//拷贝
}
//关闭文件
fclose(fp1);
fclose(fp2);
return 0;
}
fgets()
从fp指向的文件中读取一个长度为n-1的字符串,存放到字符数组str中,如果读成功,返回地址str,失败则返回NULL。
fgets(str,n,fp)
fputs()
把str所指向的字符串写入到文件指针变量fp所指向的文件中。输出成功则返回0,否则返回非0值。
fputs(str,fp)
示例
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//从磁盘读入若干个字符串,对他们按字母大小的顺序排序,然后把排好序的字符串送到磁盘文件中保存。
int main()
{
FILE *fp1,*fp2;
char str[10][10],tmp[10];
int i=0,j,k,n = 10;
fp1 = fopen("test.txt","r");
/*
for(i=0;i<n;i++){
gets(str[i]);
//输入字符串
}
*/
while(fgets(str[i],10,fp1)!=NULL){
i++;//puts(str[i++]);
}
//冒泡排序
for(int i=0;i<n;i++){
for(j = n-1;j>=i;j--){
if(strcmp(str[i],str[j])>0)
{
strcpy(tmp,str[i]);
strcpy(str[i],str[j]);
strcpy(str[j],tmp);
}
}
}
printf("\nSort\n");
for(i=0;i<n;i++){
puts(str[i]);
//输入字符串
}
fp2 = fopen("test_copy.txt","w+");
for(int i=0;i<10;i++){
fputs(str[i],fp2);
}
return 0;
}
fprintf()
fprintf(文件指针,格式字符串,输出表列)
fscanf()
fscanf(文件指针,格式字符串,输入表列)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MaxSize 10
typedef struct Student_type{
char name[10];
int num;
int age;
char addr[15];
}stdu1;
//从键盘读入10个学生的有关数据,然后把他们转存到磁盘文件上去。
void save(){
stdu1 stdu[3];
FILE *fp;
if(fp = fopen("stdu.txt","wb")==NULL){
printf("打开失败\n");
}
for(int i=0;i<1;i++){
scanf("%s%d%d%s",stdu[i].name,&stdu[i].num,&stdu[i].age,stdu[i].addr);
printf("输入成功:%s %d %d %s\n",stdu[i].name,stdu[i].num,stdu[i].age,stdu[i].addr);
//dsa 23 54 fsdf
}
for(int i=0;i<1;i++){
if(fwrite(&stdu[i],sizeof(struct Student_type),1,fp)!=1){
printf("error");
}
}
fclose(fp);
}
int main()
{
save();
return 0;
}