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;
}
结果如下: