C语言文件操作

文章目录

1.字符串读取文件

  1. 读字符串函数 fgets()
    函数原型
char *fgets(char *str,int n,FILE *fp);

//其意义是从fp所指的文件中读取10个字符送入字符数组str中,接着再将str字符串打印出,若文件读不到数据则返回NULL,此时会离开循环。
FILE *fp;
char str[10];
fp=fopen("E:\\code\\1.txt","rt");
while((fgets(str,10,fp)!=NULL){
	printf("os",str);
}

其功能是:在文件指针所指文件位置读取n个字符并放入str字符数组中。如果读不到字符串,则返回NULL。

  1. 写字符串函数 fputs()
    函数原型
int fputs(char *str,FILE *fp);

//其意义是把字符串str中的内容写入文件指针fp所指文件。
FILE *fp;
char str[10];
fp=fopen("E:\\code\\1.txt","rt");
gets(str);
fputs(str,fp);

其功能是:将字符串str写入文件指针fp所指文件的位置。写入数据成功时返回非0值,写入失败时返回EOF。其中,字符串str可以是字符串常量,也可以是字符数组名或指针变量

2.格式化字符串读写函数

  1. 格式化字符串读函数 fscanfO)
    函数原型
int fscanf(FILE *fp,”格式化字符串”,输入项地址表);
//E盘code文件夹下1.txt中存有以下数据,该数据有学号、姓名、性别三项数据,现从该文件中读取出该条数据指定的变量
FILE *fp;
char num[20],name[40],sex[5];
fp=fopen("E:\\code\\1.txt","t"); 
fscanf(fp,"%s %s %s",num,name,sex);

功能:从文件指针fp所指向的文件中按照格式字符串指定的格式,将文件中的数据送到输入项地址表中。若读取数据成功会返回所读取数据的个数,并将数据按照指定格式存入内存中的变量或数组中,文件指针自动向下移动;若读取失败则返回EOF。

  1. 格式化字符串写函数 fprintf()
    函数原型
int fprintf(FILE *FP,"格式化字符串",输出项地址表);

//首先,初始化要追加的数据,然后以追加写方式打开指定文件。
char num[20]="20210101",name[40]="某某",sex[5]="男";
FILE *fp; 
fp=fopen("E:\\code\\1.txt","a+"); 
fputc('\n',fp); /*写入一个回车换行,保持原文件格式不变*/ 
fprintf(fp,"%s %s %s",num,name,sex);

功能:将输出项表中的变量值按照格式字符串指定的格式输出到文件指针fp所指向的文件位置

3.数据块读写操作

  1. 数据块读函数fread()
    函数原型
int fread(void *buffer,int size,int count,FILE* fp);
函数fread()内各个参数的含义如下:
(1) buffer是一个指针,它表示存放读入数据的首地址(即存放在何处)。
(2) size表示数据块的字节数。
(3) count表示要读写的数据块块数。

//其意义是从fp所指的文件中,每次读4个字节(一个实数)送入实型数组fa中,连续读5次,即读5个实数到fa中
float fa[5];
fread(fa.4,5,fp);

功能:从文件指针fp所指向的文件的当前位置开始**,一次读入size个字节,重复count次**,并将读取到的数据存到buffer 开始的内存区中,同时将读写位置指针后移size*count次。该函数的返回值是实际读取的count值

  1. 数据块写函数fwrite()
    函数原型:
int fwrite(void *buffer,int size,int count, FILE* fp);
函数fwrite()内各个参数的含义如下:
(1) buffer是一个指针,它表示要输出的数据在内存中的首地址(即从何处开始存储)。
(2) size表示数据块的字节数。
(3) count表示要读写的数据块块数

//其意义是从fa实型数组中,每次读4个字节(一个实数)写入fp所指的文件中,连续读写5次,即将5个实数写到fp所指的文件中。
float fa[5];
fwrite(fa.45,fp);

功能:从buffer所指向的内存区开始,一次输出size个字节,重复count次,并将输出的数据存入到fp所指向的文件中,同时将读写位置指针后移size*count次。

4.文件的随机读取

  1. 函数rewind()
    函数原型
void rewind(FILE *fp);

其功能是:将文件内部的位置指针移到文件的开始位置。

  1. 函数 fseek( )
    函数原型
int fseek(FILE *fp, long offset,int whence);
第2个参数是偏移量(offset)。
该参数表示从起始点开始要移动的距离(参见表)的起始点模式)。
该参数必须是一个1ong类型的值,可以为正(前移)、负(后移)或0(保持不动)
第3个参数是模式,该参数确定起始点。

其功能是:文件指针由whence地址移到offset的地址。

模式 偏移量起始位置
SEEK_SET 文件开始初
SEEK_CUR 当前位置
SSEK_END 文件末尾
下面是调用fseek()函数的一些示例,fp是一个文件指针:
fseek(fp, 0, SEEK SET); //定位至文件开始处
fseek(fp,10,SEEK_SET); //定位至文件中的第 10 个字节
fseek(fp, 2,SEEK CUR); //从文件当前位置前移2个字节
fseek(fp, 0,SEEK_END); //定位至文件结尾
fseek(fp,-10,SEEK_END);//从文件结尾处回退 10 个字节
  1. 函数ftell()
    函数 ftell)的作用是得到流式文件的当前位置,用相对于文件开头的位移量来表示。
    如果ftell函数返回值为-1L,表示出错。例如:
i=ftell(fp);
if(i==-1L){
	printf("Error!\n”);
}
变量i存放在当前位置,如调用函数出错(如不存在此文件),则输出“Error!”。

5.出错检查

  1. 函数feof()
    函数原型
int feof(FILE *fp);

功能:判断文件指针fp是否处于文件结束位置,若文件结束,则返回值为1,否则为0。

  1. 函数 ferror( )
    函数原型
int ferror(FILE *fp);

功能:检查文件在用各种输入/输出函数进行读写时是否出错。如果ferror返回值为0表示未出错,否则表示有错。
应该注意,对同一个文件每一次调用输入/输出函数,均产生一个新的ferror函数值,因此,应当在执行fopen函数时,ferror函数的初始值自动置0

  1. 函数clearerr()
    函数原型
int clearerr(FILE *fp);

功能:用于清除出错标志和文件结束标志,使它们为0值。假设在调用一个输入输出函数时出现错误,ferror函数值为一个非0值。在调用clearerr(fp)后,ferror(fp)的值变为0。
只要出现错误标志,就会一直保留,直到对同一文件调用clearerr函数或rewind函数,或任何其他一个输入/输出函数。

上一篇:python笔记71 - traceback.print_exc()保存异常内容


下一篇:Python读写文件