这里只是针对文本文件的简单操作。假设我要对txt文件操作
//文件只读(fgetc)
char fileName[20]="C:\\test.txt";
FILE* fp = fopen(fileName, "r");//打开文件
if (fp==NULL)//判断文件打开是否成功
{
printf("打开%s文件失败!", fileName);
exit(-1);
}
//循环读取字符串
while (!feof(fp)) { //feof在到达给出的文件流的文件尾时返回一个非零值.
char c= fgetc(fp);//每次读取一个字符
putchar(c);
}
fclose(fp);//关闭文件
//文件只写 并且会覆盖原来的内容,谨慎操作(fputc、fputs)
char fileName[20] = "C:\\test.txt";
FILE* fp = fopen(fileName, "w");//打开文件
if (fp == NULL)//判断文件打开是否成功
{
printf("打开%s文件失败!", fileName);
exit(-1);
}
//方法一:把字符串写入文件(fputc)
char c;
while ((c=getchar())!='\n') { //换行则退出
fputc(c,fp); //fputc(一个字符或者字符变量,要写入的文件)
}
//方法二:把字符串写入文件(fputs)
char buffer[100];
while (1)
{
gets_s(buffer);//在控制台输入字符串
if (strcmp(buffer,"quit")==0)//当字符串等于quit,则退出
{
break;
}
fputs(buffer, fp);//把buffer里的字符串存入fp文件中
fputs("\n", fp);
}
fclose(fp);//关闭文件
//文件拷贝。只要知道了文件读取与写入,那么,文件之间的拷贝就轻而易举了。
char fileName[20] = "C:\\test.txt";
FILE* fpr = fopen(fileName, "r");//打开读取的文件
if (fpr == NULL)//判断文件打开是否成功
{
printf("打开%s文件失败!", fileName);
exit(-1);
}
char fileName1[20] = "C:\\test1.txt";
FILE* fpw = fopen(fileName1, "w");//打开或者创建一个要写入的文件
if (fpw == NULL)
{
printf("打开%s文件失败!", fileName);
exit(-1);
}
while (!feof(fpr)) { //feof()函数来检测fpr文件的长度
char c = fgetc(fpr);
fputc(c, fpw);
}
fclose(fpr);
fclose(fpw);
//fprintf(),fscanf() 用法
假设我要往文件里存入结构体的数据,那么就先建一个结构体
typedef struct
{
char name[20];//姓名
int age; //年龄
float score; //分数
}Student;
//把写入文件的操作放在一个函数里,方便主函数调用
void writeFile() {
char fileName[20] = "C:\\test2.txt";
FILE* fp = fopen(fileName, "w");//打开文件
if (fp == NULL)
{
printf("打开%s文件失败!", fileName);
exit(-1);
}
Student stu = { "Tom",25,98.8 };//往结构体输入数据
fprintf(fp, "%s %d %.2f\n",stu.name,stu.age,stu.score );/*fprintf(文件,录入格式,结构体数据),格式很关键,数据之间可以是空格,也可以是逗号,比如我用这样的方式存入文
件"%s,%d,%.2f\n",那么在fscanf调用时,也要加上逗号,不然会出错*/
fclose(fp);//关闭文件
getchar();
}
//把要读取的文件放在一个函数里,方便主函数调用
void readFile() {
char fileName[20] = "C:\\test2.txt";
FILE* fp = fopen(fileName, "r");//打开文件
if (fp == NULL)
{
printf("打开%s文件失败!", fileName);
exit(-1);
}
Student stu;
fscanf(fp, "%s %d %.2f\n", stu.name, &stu.age, &stu.score);//把fp里的数据放在student结构体中,注意格式
printf("%s %d %.2f\n",stu.name,stu.age,stu.score );//从结构体中打印数据
fclose(fp);//关闭文件
getchar();
}