基本文件操作fopen fwrite,fread函数的用法示例

更新时间:2024-09-26 09:47:58

本文主要介绍fopen()、fwrite()、fread()函数使用以及示例

行文不易,新手上路,多多关注,惊喜不断,私信更有惊喜

fopen()函数

  1. 作用: 在C语言中fopen()函数用于打开指定路径的文件,获取指向该文件的指针。
  2. 函数原型:
FILE * fopen(const char * path,const char * mode); 
 -- path: 文件路径,如:"F:\Visual Stdio 2012\test.txt" 
 -- mode: 文件打开方式,例如: 
 "r" 以只读方式打开文件,该文件必须存在。 
 "w" 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。 
 "w+" 打开可读写文件,若文件存在则文件长度清为零,即该文件内容会消失。若文件不存在则建立该文件。 
 "a" 以附加的方式打开只写文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾,即文件原先的内容会被保留。(EOF符保留) 
 "a+" 以附加方式打开可读写的文件。若文件不存在,则会建立该文件,如果文件存在,写入的数据会被加到文件尾后,即文件原先的内容会被保留。(原来的EOF符不保留) 
 "wb" 只写打开或新建一个二进制文件,只允许写数据。 
 "wb+" 读写打开或建立一个二进制文件,允许读和写。 
 "ab" 追加打开一个二进制文件,并在文件末尾写数据。 
 "ab+"读写打开一个二进制文件,允许读,或在文件末追加数据。 
 --返回值: 文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno中。 

fwrite()函数

  1. 作用:在C语言中fwrite()函数常用语将一块内存区域中的数据写入到本地文本。
  2. 函数原型:
size_t fwrite(const void* buffer, size_t size, size_t count, FILE* stream); 
 -- buffer:指向数据块的指针 
 -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) 
 -- count:数据个数 
 -- stream:文件指针 

注意:返回值随着调用格式的不同而不同

  • 调用格式:fwrite(buf,sizeof(buf),1,fp);

成功写入返回值为1(即count)

  • 调用格式:fwrite(buf,1,sizeof(buf),fp);

成功写入则返回实际写入的数据个数(单位为Byte)

  • 收尾工作

写完数据后要调用fclose()关闭流,不关闭流的情况下,每次读或写数据后,文件指 针都会指向下一个待写或者读数据位置的指针。

案例

下面代码可将1024个字(int)写入到文本文件,fwrite的调用中,size是sizeof(int),count是DATA_SIZE

#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h> 
#include <stdlib.h> 
#define DATA_SIZE 1024 
 
int main() 
{ 
 unsigned int *dataPtr = NULL; 
 dataPtr = (unsigned int *)malloc(sizeof(int)*DATA_SIZE); 
 for(unsigned int i=0;i<DATA_SIZE;i++) 
 { 
 dataPtr[i] = i; //初始化缓存区 
 } 
 FILE *fp = fopen("F:\\Labwindows cvi\\test.txt","w"); 
 fwrite(dataPtr,sizeof(int),DATA_SIZE,fp); 
 fclose(fp); 
 free(dataPtr); 
 system("pause"); 
 return 0; 
} 

fread()函数

  • 作用:从一个文件流中读取数据
  • 函数原型如下:
size_t fread(void *buffer, size_t size, size_t count, FILE *stream); 
 -- buffer:指向数据块的指针 
 -- size:每个数据的大小,单位为Byte(例如:sizeof(int)就是4) 
 -- count:数据个数 
 -- stream:文件指针 

注意:返回值随着调用格式的不同而不同:

  • 调用格式:fread(buf,sizeof(buf),1,fp);

读取成功时:当读取的数据量正好是sizeof(buf)个Byte时,返回值为1(即count)

否则返回值为0(读取数据量小于sizeof(buf))

  • 调用格式:fread(buf,1,sizeof(buf),fp);

读取成功返回值为实际读回的数据个数(单位为Byte)

案例

定义两个FILE变量,一个用于write,一个用于read,写完后要close掉,然后再打开,然后读。

#include <stdio.h> 
#include <stdlib.h> 
#include <string.h> 
 
 
int main(int argc, char *argv[]) 
{ 
 FILE *filp = NULL; 
 char fileDir[] = "/home/yangzhiyuan/Documents/test.txt"; 
 char dataPtr[] = "Helloworld"; 
 printf("sizeof(dataPtr) = %ld\n",sizeof(dataPtr)); 
 filp = fopen(fileDir,"w+"); /* 可读可写,不存在则创建 */ 
 int writeCnt = fwrite(dataPtr,sizeof(dataPtr),1,filp); /* 返回值为1 */ 
 //int writeCnt = fwrite(dataPtr,1,sizeof(dataPtr),filp); /* 返回值为11 */ 
 printf("writeCnt = %d\n",writeCnt); 
 fclose(filp); 
 
 FILE *fp = NULL; 
 fp = fopen(fileDir,"r"); 
 char buffer[256]; 
 int readCnt = fread(buffer,sizeof(buffer),1,fp); /* 返回值为0 */ 
 //int readCnt = fread(buffer,1,sizeof(buffer),fp); /* 返回值为11 */ 
 printf("readCnt = %d\n",readCnt); 
 fclose(fp); 
 
 printf("%s\n",buffer); 
 exit(0); 
} 

相关推荐

墙上挂网多少钱

墙上挂网的价格因多种因素而异,包括挂网的类型、材料、施工难度以及所在地区的不同。以下是一些具体的价格信息:一般价格范围墙面挂网的价格大约在每平方米6元至10元之间。某些情况下,价格可能会在每平方米100元以上。具体价格因素材料:钢丝网通常比塑料网贵一些。施工难度:如果墙面状况较差,需要大量修补和处理

2025-02-01 09:19:22

课桌大约长多少米

课桌的长度并没有一个统一的标准,但根据常见的课桌尺寸信息,可以得出以下结论:一般情况下,课桌的长度约为1.2米。课桌的长度通常在1.2米到1.5米之间。特定类型课桌长度,例如单人课桌长度通常在65厘米到75厘米之间,双人课桌长度可能在1.1米到2米之间。一般中小学双人课桌长度约1米至1米3之间。综合

2025-02-01 09:16:22

最佳桌子高度是多少

桌子高度的最佳选择取决于使用者的身高和使用环境。以下是一些常见建议:一般适用高度71厘米至75厘米:这是一个较为普遍接受的高度范围,适合大多数人使用,可以保证坐着不会感到难受,便于学习、工作和吃饭等日常活动。根据使用者身高调整学生书桌:可以根据学生的身高来调整桌子的高度,确保书写姿势正确。餐桌:根据

2025-02-01 09:12:55

被褥干洗多少钱

被褥的干洗费用 因多种因素而异,包括被子的尺寸、材质、重量以及干洗店的类型和档次。以下是一些具体的价格范围:普通干洗店价格通常在20元到50元之间,具体费用取决于被子的尺寸和材质。中档干洗店价格在30元到80元之间,一些高档的被子如羊绒被或羽绒被可能需要支付更高的费用。高档干洗店价格在60元到100

2025-02-01 09:08:22

打印征信费用多少

打印征信报告的费用如下:前两次免费:如果是在一年之内,前两次打印征信报告是免费的。第三次起收费:从第三次开始,每次打印征信报告需要支付20元到25元的费用。费用差异:不同城市的收费标准可能会有所不同,但一般情况下,费用大约在20元到30元之间。额外费用:如果需要更频繁地查询或获取详细的信用信息,个别

2025-02-01 07:42:54