在学习文件操作时很多人在开头就会迎来一个常见问题,如何创建文件以及如何打开文件呢?
多的不说直接上代码
int main()
{
FILE* fp;//创建一个文件指针
fp = fopen("C:\\code\\2022\\practice-code\\test.c_4.21\\test.txt", "w+");//w+ 是一个文件使用方式
return 0;
}
文件创建成功;
fopen是一个文件打开关键字 它将以文件的打开方式(eg:“w+:打开/创建一个文件允许读写,下面会列出文件的使用方式表,”)打开一个文件,并且放回文件地址 给fp。
第一个“”是文件在电脑中的位置 ,这里要注意在你将文件地址打到“”中后运行往往会出现报错
这是由于文件地址中的'\'是转义字符 所以要在前面在加一个'\'转义字符
文件的地址可以直接在赋值过来然后加上转义字符和文件名字.txt;
下表为文件的使用方式,运用合理的方式来创建和打开文件
fprintf(fp,"输入格式",存储在信息的地方)/fprintf(fp,"要输入进文件的信息")
fscanf(fp,"输出格式",接受输出的地址)
其实跟printf和scanf相差不多 fprintf打印的地方改成了文件上,在文件上显示所要打印的内容
如下
int main()
{
FILE* fp;
char a = 'b';
fp = fopen("C:\\code\\2022\\practice-code\\test.c_4.21\\test.txt", "w+");
fprintf(fp, "%c",a);//第一种方式
return 0;
}
结果如下
第二种方式
int main()
{
FILE* fp;
char a = 'b';
fp = fopen("C:\\code\\2022\\practice-code\\test.c_4.21\\test.txt", "w+");
fprintf(fp, "love love you");//第二种方式
return 0;
}
接下来是fscanf:改关键字就是将文件中的数据赋值给编译器中的储存空间例如变量或者数组
int main() //文件的写入和输出 将fprintf的主体变成文件,意思就是从终端打印变成了在文件中打印;
{
int a, n = 0;
FILE* fp;
fp = fopen("C:\\code\\2022\\practice-code\\test.c_4.21\\test.txt", "w+");
int arr1[] = { 1,2,3,4,5,6,7 };
while (n<7)// 循环向文件中输入数组中的数字
{
fprintf(fp, "%d", arr1[n]);
n++;
}
rewind(fp);//一个将fp指针指向文件数据的开头的关键字
printf("文件中的数据为:");
n = 0;
while (n < 7) //循环从文件中“提取”数据赋值给自己的给定变量;
{
fscanf(fp, "%1d", &a);//赋值给a;
n++;
printf("%d", a);
}
return 0;
}
运行结果
其中说一下 fp指针:在你给文件中不断的传输值时它的指针也在不断变换位置 当输入完毕后指针还是指向最后一次输入数据的后面 那么这个时候你就要重置一下指针的位置;在这里我使用的时rewind(文件指针)的关键字,当然还可以使用 fclose(fp)来将文件关闭之后再次fp=fopen()打开文件(这个时候可以选择一个其他的文件使用方式比如“r”只能读,起到文件保护作用)
在不断打代码尝试之后发现能不能有一种方式能存储结构体数据和其他的类型的方式呢?
fread(被写入的地址,读取大小,读取次数,文件指针)
fwrite(将要写入文件信息的地址,写入大小,写入次数,文件指针)
这里我直接将两个关键之的参数翻译成更加便于理解的文字
下面就用一个简易的存储结构体方式为例
typedef struct list
{
char name[20]; //姓名
char address[20];//地址
char tep[15];//电话号码
}list;//宏定义一个结构体
void show(int n, FILE* fp)//展示列表 形参的接受形式与实参相同
{
rewind(fp);
list info[100];
for (int i = 0; i < n; i++)
{
fread(&info[i], sizeof(list), 1, fp);
printf("\n");
printf("%20s%20s%15s", info[i].name, info[i].address, info[i].tep);
}
}
int main()
{
FILE* fp;
list info[100];
fp = fopen("C:\\code\\2022\\practice-code\\test.c_4.21\\info.txt", "w+");// 文件定位或者创造
int n = 0;
printf("请输入要操作的学生数\n");
scanf("%d", &n);
for (int m = 0; m < n; m++)
{
printf("\n");
printf("第%d个\n",m+1);
printf("请输入学生姓名:\n");
scanf("%s",&info[m].name);
printf("请输入学生地址:\n");
scanf("%s", &info[m].address);
printf("请输入学生电话:\n");
scanf("%s", &info[m].tep);
fwrite(&info[m], sizeof(list), 1, fp);//将刚刚赋值完的第一个结构体写入文件中。 其中&info[m]便是将要写入文件的结构体地址 结构体的大小 写入一次
}
show(n,fp,info);// 传参 1、学生档案的个数传进去以便展示时的循环次数 2、文件指针 再次也可以在函数中再次fopen一次 但是要在之前fclose一下
// 将结构体数组的首元素地址传输进去
return 0;
}
感谢品读,如果觉得本文对你的学习提供了一些思路、认识和帮助的话关注点赞收藏!!!
感谢感谢!!!