ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

C语言文件操作

2021-12-01 20:33:56  阅读:123  来源: 互联网

标签:fp 文件 函数 int C语言 str FILE 操作


文章目录

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函数,或任何其他一个输入/输出函数。

标签:fp,文件,函数,int,C语言,str,FILE,操作
来源: https://blog.csdn.net/The_onion/article/details/121661694

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有