目录
文件打开方式
文件读取——单个字符
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,从文件读取的数据放入b
char str_a[N], str_b[N];
char size = sizeof(char);
FILE *fp;
if( (fp=fopen(filename, "rwb+")) == NULL ){ //以二进制方式打开
puts("Fail to open file!");
return;
}
//从键盘输入数据 并保存到数组a
gets(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);
//从文件读取内容并保存到数组b
fread(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; i<N; i++,pboys++){
scanf("%s %d %d %f", pboys->name, &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读取内容,放在缓冲区,再将缓冲区的内容写入fileWrite
while( (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<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>
void 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,从文件读取的数据放入b
char str_a[N], str_b[N];
char size = sizeof(char);
FILE *fp;
if( (fp=fopen(filename, "rwb+")) == NULL ){ //以二进制方式打开
puts("Fail to open file!");
return;
}
//从键盘输入数据 并保存到数组a
gets(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);
//从文件读取内容并保存到数组b
fread(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; i<N; i++,pboys++){
scanf("%s %d %d %f", pboys->name, &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读取内容,放在缓冲区,再将缓冲区的内容写入fileWrite
while( (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;
}