C语言的文件
一、文件基本操作:
在c语言中,对数据文件的操作都是依靠文件类型指针来完成。
1.文件类型指针的定义方式:FILE *文件类型变量
2.调用fopen函数打开文件的方法:
文件类型指针变量=fopen(文件名,使用文件打开方式);
文件打开方式(12种)
文件打开方式 |
意义 |
rt |
只读打开一个文本文件,只允许读数据 |
wt |
只写打开或建立一个文本文件,只允许写数据 |
at |
追加打开一个文本文件,并在文件末尾写数据 |
rb |
只读打开一个二进制文件,只允许读数据 |
wb |
只写打开或建立一个二进制文件,只允许写数据 |
ab |
追加打开一个二进制文件,并在文件末尾写数据 |
rt+ |
读写打开一个文本文件,允许读和写 |
wt+ |
读写打开或建立一个文本文件,允许读写 |
at+ |
读写打开一个文本文件,允许读,或在文件末追加数据 |
rb+ |
读写打开一个二进制文件,允许读和写 |
wb+ |
读写打开或建立一个二进制文件,允许读和写 |
ab+ |
读写打开一个二进制文件,允许读,或在文件末追加数据 |
3.文件关闭;
Fclose(文件指针)
二、文件读写操作
1.字符的读写函数:fgetc()和fputc();
2.格式化读写函数:fscanf()和fprintf();
3.数据块读写函数:fread()和fwrite();
4.字符串的读写函数:fgets()和fputs();
示例代码如下:
#include<stdio.h> #include<stdlib.h> #include<string.h> #include <time.h> #define NUM 99999 //打开或创建文件 FILE *fp; int str[NUM]; void build(int a){ if(a==1){ if((fp=fopen("d://1234.txt","w"))==NULL) /* c盘下创建c:\123.txt文件*/ { printf("\nopen file error"); getchar(); exit(1); } } else if(a==2){ if((fp=fopen("d://1234.txt","r"))==NULL) /* c盘下创建c:\123.txt文件*/ { printf("\nopen file error"); getchar(); exit(1); } } else if(a==3){ if((fp=fopen("d://1234","wb"))==NULL) /* c盘下创建c:\123.txt文件*/ { printf("\nopen file error"); getchar(); exit(1); } } else if(a==4){ if((fp=fopen("d://1234","rb"))==NULL) /* c盘下创建c:\123.txt文件*/ { printf("\nopen file error"); getchar(); exit(1); } } } //关闭文件 void Close(){ fclose(fp); } //产生写入的数据 void num(){ int i; for(i=0;i<NUM;i++){ str[i]=i+9999; } } //fputc() void Fputc(){ int i,j; char c[100]; for(i = 0; i < NUM; i++) { itoa(str[i],c,10); for(j=0;j<strlen(c);j++) fputc(c[j],fp); } } //fgetc() void Fgetc(){ char c; for(c=fgetc(fp);c!=EOF;c=fgetc(fp)){} } //fscanf() void Fscanf(){ int i=0; int str1; while(fscanf(fp,"%d",&str1)==1){ //print(); } } //fprintf()写入文件 void Fprintf(){ int i; for(i=0;i<NUM;i++) fprintf(fp,"%d ",str[i]); } //Fread() void Fread(){ int i,b[NUM]; if(fread(b,sizeof(int),NUM,fp)!=NUM)printf("error!"); //for(i=0;i<99999;i++);printf("%d ",b[i]); } //Fwrite() void Fwrite(){ if(fwrite(str,sizeof(int),NUM,fp)!=NUM)printf("error!"); } //fgets() void Fgets(){ char mystring[NUM]; if (fgets(mystring,NUM,fp)!= NULL){} //printf("%s",mystring); } //fputs()写函数 void FputS(){ int i,j; char c[100]; for(i = 0; i < NUM; i++) { itoa(str[i],c,10); fputs(c,fp); } } int main() { double cputime; num(); //fputc() clock_t a=clock(); build(1); Fputc(); Close(); clock_t b=clock(); cputime=(double)(b-a)/CLOCKS_PER_SEC; printf("fputc()读入时间=%.4f seconds\n",cputime); //fgetc() clock_t a1=clock(); build(2); Fgetc(); Close(); clock_t b1=clock(); cputime=(double)(b1-a1)/CLOCKS_PER_SEC; printf("fgetc()读取时间=%.4f seconds\n",cputime); ////fprintf() clock_t a2=clock(); build(1); Fprintf(); Close(); clock_t b2=clock(); cputime=(double)(b2-a2)/CLOCKS_PER_SEC; printf("fprintf()读入时间=%.4f seconds\n",cputime); //fscanf() clock_t a3=clock(); build(2); Fscanf(); Close(); clock_t b3=clock(); cputime=(double)(b3-a3)/CLOCKS_PER_SEC; printf("fscanf()读取时间=%.4f seconds\n",cputime); //Fwrite() clock_t a4=clock(); build(3); Fwrite(); Close(); clock_t b4=clock(); cputime=(double)(b4-a4)/CLOCKS_PER_SEC; printf("Fwrite()读入时间=%.4f seconds\n",cputime); //Fread() clock_t a5=clock(); build(4); Fread(); Close(); clock_t b5=clock(); cputime=(double)(b5-a5)/CLOCKS_PER_SEC; printf("Fread()读取时间=%.4f seconds\n",cputime); //fputs()写函数 clock_t a6=clock(); build(1); FputS(); Close(); clock_t b6=clock(); cputime=(double)(b6-a6)/CLOCKS_PER_SEC; printf("fputs()读入时间=%.4f seconds\n",cputime); //fgets() clock_t a7=clock(); build(2); Fgets(); Close(); clock_t b7=clock(); cputime=(double)(b7-a7)/CLOCKS_PER_SEC; printf("fgets()读取时间=%.4f seconds\n",cputime); return 0; }
结果如下:
时间: 2024-10-14 01:00:30