fread()与fwrite():
假如我们现在想写一个或者读一个下面类型的数据:
struct dataTest{
char str[30];
int index;
char add[100];
};
我们使用fgets(),fputs()均不能完成,此时就要用到我们的fread()和fwrite()函数了。这两组函数是用来读写二进制文件的。读字符文件不能读完,那我们就用读二进制的文件,这样就能保证读到所需要的二进制文件了。
fread()函数介绍:
#include <stdio.h>
size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream)
函数功能:从指定的stream流对象中获取读取nmemb个大小为size字节的数据块到ptr所在的本地内存中。
参数:
ptr:要存储数据的本地内存,一般是数组或者是结构体指针;
size:单个数据块的元数据大小,最小单元的大小;
nmemb:获取数据块的个数,拷贝的数据块的个数;
stream:要获取数据的源文件流对象。
实例:
#include <stdio.h>
#include <string.h>
typedef struct PER
{
char name[20];
char age[20];
char tel[20];
}Per;
int main()
{
Per Per1;
FILE* fp = fopen("per.txt","r");
if(NULL == fp)
{
printf("fopen err\n");
return 1;
}
fread(&Per1,sizeof(Per),1,fp);
printf("name:%s\nage:%s\ntel:%s\n",Per1.name,Per1.age,Per1.tel);
fclose(fp);
return 0;
}
结果:
fwrite()函数介绍:
#include <stdio.h>
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream);
函数功能:从ptr所在的本地内存中取出nmemb个大小为size的数据块写道stream流对应的文件流对象中。
参数:
ptr:要写的数据块的地址,一般是数组或者是结构体指针;
size:要写的数据块的大小,单元为字节;
nmemb:要写的数据块的个数;
stream:要写的目标流流对象。
返回值:
成功,小于等于nmemb的个数;
失败,小于0。
实例:
#include <stdio.h>
#include <string.h>
typedef struct PER
{
char name[20];
char age[20];
char tel[20];
}Per;
int main()
{
Per Per1;
strcpy(Per1.name,"kkkk");
strcpy(Per1.age,"20");
strcpy(Per1.tel,"123");
FILE* fp = fopen("per.txt","w");
if(NULL == fp)
{
printf("fopen err\n");
return 1;
}
fwrite(&Per1,sizeof(Per),1,fp);
fclose(fp);
return 0;
}