目录
文件打开方式
文件读取——单个字符
文件写入——单个字符
文件读取——一行字符
文件写入——一行字符
文件读写——数据块
文件读写——格式化
文件读写——随机
文件复制:
完整代码示例:
文件打开方式
文件读取——单个字符
void onlyRead_ByOneChar(char*filename){//从文件读取单个字符并输出 FILE*fp;char ch;if((fp=fopen(filename,"r"))==NULL){puts("open file error.");return;}//每次从文件读取一个字符并显示 while((ch=fgetc(fp))!=EOF){printf("%c",ch);}fclose(fp);}
文件写入——单个字符
void overWrite_ByOneChar(char*filename){//从键盘输入单个字符并覆写文件 FILE*fp;char ch;if((fp=fopen(filename,"w+"))==NULL){puts("open file error.");return;}//每次从键盘读取一个字符并写入文件puts("写入规则:用|开头,并每个字段输入完用|结尾,最后一个字段不需要用|。"); while ( (ch=getchar()) != '\n' ){fputc(ch,fp);}fclose(fp);}
文件读取——一行字符
void onlyRead_ByOneLine(char*filename){//从文件读取一行字符串并输出FILE *fp;const int N=101;//最多一次读N个字符 char str[N];if((fp=fopen(filename,"r"))==NULL){puts("open file error.");return;} while(fgets(str, N, fp) != NULL){printf("%s", str);}fclose(fp);}
文件写入——一行字符
void appendWrite_ByOneLine(char*filename){//从键盘输入一行字符串并追加写入文件 FILE *fp;const int N=101;//最多一次读N个字符 char str[N]={0},tempstr[N];if((fp=fopen(filename,"a+"))==NULL){puts("open file error.");return;}printf("请输入一行数据,写入规则:用|开头,并每个字段输入完用|结尾,最后一个字段不需要用|。:\n");gets(tempstr);strcat(str,"\r");//添加回车符 strcat(str,tempstr);fputs(str, fp);fclose(fp);return;}
文件读写——数据块
void ReadAndWrite_ByDataBlock(char*filename){//从键盘写入数据再从文件读出(读写初始位置为文件头)const int N = 101;//从键盘输入的数据放入a,从文件读取的数据放入bchar str_a[N], str_b[N];char size = sizeof(char);FILE *fp;if( (fp=fopen(filename, "rwb+")) == NULL ){//以二进制方式打开puts("Fail to open file!");return;}//从键盘输入数据 并保存到数组agets(str_a);int i,str_n=0;while(str_a[i]!='\0'){i++;}str_n=i; //将字符串a的内容写入到文件fwrite(str_a, size, str_n, fp);//将文件中的位置指针重新定位到文件开头rewind(fp);//从文件读取内容并保存到数组bfread(str_b, size, str_n, fp);//在屏幕上显示数组b的内容puts(str_b);printf("\n");fclose(fp);}
文件读写——格式化
void ReadAndWrite_ByFormat(char *filename){//格式化读写const int N=101; char name[N]={0}; int age=0; float score=0;FILE *fp; if( (fp=fopen(filename,"wt+")) == NULL ){puts("Fail to open file!");return; }//从键盘读入数据printf("请输入姓名、年龄、分数:\n");scanf("%s%d%f",&name, &age, &score); //将数据写入到文件fprintf(fp,"%s %d %f\n", name,age,score); //重置文件指针rewind(fp);//从文件中读取数据fscanf(fp, "%s%d%f\n",&name,&age,&score);//将数据输出到显示器printf("%s %d %f\n", name,age,score);fclose(fp);return;}
文件读写——随机
void ReadAndWrite_ByRandom(char *filename){//随机读写 const int N=3;struct stu{char name[10]; //姓名int num;//学号int age;//年龄float score;//成绩}boys[N], boy, *pboys; FILE *fp;int i;pboys = boys;if( (fp=fopen(filename, "wt+")) == NULL ){printf("Cannot open file, press any key to exit!\n");return; }printf("Input data:\n");for(i=0; iname, &pboys->num, &pboys->age, &pboys->score);}fwrite(boys, sizeof(struct stu), N, fp);//写入三条学生信息fseek(fp, sizeof(struct stu), SEEK_SET);//移动位置指针fread(&boy, sizeof(struct stu), 1, fp);//读取一条学生信息printf("%s%d%d %f\n", boy.name, boy.num, boy.age, boy.score);fclose(fp);return;}
文件复制:
int copyFile(char *fileRead, char *fileWrite){//文件复制函数 FILE *fpRead;// 指向要复制的文件FILE *fpWrite;// 指向复制后的文件int bufferLen = 1024*4;// 缓冲区长度char *buffer = (char*)malloc(bufferLen);// 开辟缓存int readCount;// 实际读取的字节数if( (fpRead=fopen(fileRead, "rb")) == NULL || (fpWrite=fopen(fileWrite, "wb")) == NULL ){printf("Cannot open file, press any key to exit!\n");getch();exit(1);}// 不断从fileRead读取内容,放在缓冲区,再将缓冲区的内容写入fileWritewhile( (readCount=fread(buffer, 1, bufferLen, fpRead)) > 0 ){fwrite(buffer, readCount, 1, fpWrite);}free(buffer);fclose(fpRead);fclose(fpWrite);return 1;}void UseCopyFile(){//使用文件复制函数 char fileRead[100];// 要复制的文件名char fileWrite[100];// 复制后的文件名 // 获取用户输入printf("要复制的文件:");scanf("%s", fileRead);printf("将文件复制到:");scanf("%s", fileWrite);// 进行复制操作if( copyFile(fileRead, fileWrite) ){printf("恭喜你,文件复制成功!\n");}else{printf("文件复制失败!\n");}}
完整代码示例:
#include#include #include#includevoid tip(){puts("功能列表:");puts("-----------------------");puts("------0、退出系统------");puts("------1、读取文件------");puts("------2、覆写文件------");puts("-----------------------");puts("请输入您的选择:");}void onlyRead_ByOneChar(char*filename){//从文件读取单个字符并输出 FILE*fp;char ch;if((fp=fopen(filename,"r"))==NULL){puts("open file error.");return;}//每次从文件读取一个字符并显示 while((ch=fgetc(fp))!=EOF){printf("%c",ch);}fclose(fp);}void overWrite_ByOneChar(char*filename){//从键盘输入单个字符并覆写文件 FILE*fp;char ch;if((fp=fopen(filename,"w+"))==NULL){puts("open file error.");return;}//每次从键盘读取一个字符并写入文件puts("写入规则:用|开头,并每个字段输入完用|结尾,最后一个字段不需要用|。"); while ( (ch=getchar()) != '\n' ){fputc(ch,fp);}fclose(fp);}void onlyRead_ByOneLine(char*filename){//从文件读取一行字符串并输出FILE *fp;const int N=101;//最多一次读N个字符 char str[N];if((fp=fopen(filename,"r"))==NULL){puts("open file error.");return;} while(fgets(str, N, fp) != NULL){printf("%s", str);}fclose(fp);}void appendWrite_ByOneLine(char*filename){//从键盘输入一行字符串并追加写入文件 FILE *fp;const int N=101;//最多一次读N个字符 char str[N]={0},tempstr[N];if((fp=fopen(filename,"a+"))==NULL){puts("open file error.");return;}printf("请输入一行数据,写入规则:用|开头,并每个字段输入完用|结尾,最后一个字段不需要用|。:\n");gets(tempstr);strcat(str,"\r");//添加回车符 strcat(str,tempstr);fputs(str, fp);fclose(fp);return;}void ReadAndWrite_ByDataBlock(char*filename){//从键盘写入数据再从文件读出(读写初始位置为文件头)const int N = 101;//从键盘输入的数据放入a,从文件读取的数据放入bchar str_a[N], str_b[N];char size = sizeof(char);FILE *fp;if( (fp=fopen(filename, "rwb+")) == NULL ){//以二进制方式打开puts("Fail to open file!");return;}//从键盘输入数据 并保存到数组agets(str_a);int i,str_n=0;while(str_a[i]!='\0'){i++;}str_n=i; //将字符串a的内容写入到文件fwrite(str_a, size, str_n, fp);//将文件中的位置指针重新定位到文件开头rewind(fp);//从文件读取内容并保存到数组bfread(str_b, size, str_n, fp);//在屏幕上显示数组b的内容puts(str_b);printf("\n");fclose(fp);} void ReadAndWrite_ByFormat(char *filename){//格式化读写const int N=101; char name[N]={0}; int age=0; float score=0;FILE *fp; if( (fp=fopen(filename,"wt+")) == NULL ){puts("Fail to open file!");return; }//从键盘读入数据printf("请输入姓名、年龄、分数:\n");scanf("%s%d%f",&name, &age, &score); //将数据写入到文件fprintf(fp,"%s %d %f\n", name,age,score); //重置文件指针rewind(fp);//从文件中读取数据fscanf(fp, "%s%d%f\n",&name,&age,&score);//将数据输出到显示器printf("%s %d %f\n", name,age,score);fclose(fp);return;} void ReadAndWrite_ByRandom(char *filename){//随机读写 const int N=3;struct stu{char name[10]; //姓名int num;//学号int age;//年龄float score;//成绩}boys[N], boy, *pboys; FILE *fp;int i;pboys = boys;if( (fp=fopen(filename, "wt+")) == NULL ){printf("Cannot open file, press any key to exit!\n");return; }printf("Input data:\n");for(i=0; iname, &pboys->num, &pboys->age, &pboys->score);}fwrite(boys, sizeof(struct stu), N, fp);//写入三条学生信息fseek(fp, sizeof(struct stu), SEEK_SET);//移动位置指针fread(&boy, sizeof(struct stu), 1, fp);//读取一条学生信息printf("%s%d%d %f\n", boy.name, boy.num, boy.age, boy.score);fclose(fp);return;}int copyFile(char *fileRead, char *fileWrite){//文件复制函数 FILE *fpRead;// 指向要复制的文件FILE *fpWrite;// 指向复制后的文件int bufferLen = 1024*4;// 缓冲区长度char *buffer = (char*)malloc(bufferLen);// 开辟缓存int readCount;// 实际读取的字节数if( (fpRead=fopen(fileRead, "rb")) == NULL || (fpWrite=fopen(fileWrite, "wb")) == NULL ){printf("Cannot open file, press any key to exit!\n");getch();exit(1);}// 不断从fileRead读取内容,放在缓冲区,再将缓冲区的内容写入fileWritewhile( (readCount=fread(buffer, 1, bufferLen, fpRead)) > 0 ){fwrite(buffer, readCount, 1, fpWrite);}free(buffer);fclose(fpRead);fclose(fpWrite);return 1;}void UseCopyFile(){//使用文件复制函数 char fileRead[100];// 要复制的文件名char fileWrite[100];// 复制后的文件名 // 获取用户输入printf("要复制的文件:");scanf("%s", fileRead);printf("将文件复制到:");scanf("%s", fileWrite);// 进行复制操作if( copyFile(fileRead, fileWrite) ){printf("恭喜你,文件复制成功!\n");}else{printf("文件复制失败!\n");}}int main(){int n; char*filename="D:\\stu.txt";//调用函数 return 0;}