#include <stdio.h>
#include <stdlib.h>
#include <string.h>
//二进制读写文件
//size_t fread(void* ptr,size_t size,size_t nmemb,FILE* stream),从文件中读取nmemb个元素,每个元素占了size个字节,读取结果存入ptr指向的内存中
//fwrite函数与fread的参数一样,只不过是向文件中写入数据
struct Date //表示日期的结构体
{
int year;
int month;
int day;
};
struct Book //书的结构体
{
char name[40];
char author[40];
struct Date date;
};
int main(int argc, char** argv)
{
//**********写入*************
FILE* fp;
if ((fp = fopen("1.txt", "wb")) == NULL) //以二进制写方式打开
{
printf("打开文件失败\n");
exit(EXIT_FAILURE);
}
fputc('1', fp); //向文件写入字符‘1’
fputc('2', fp); //向文件写入字符‘2’
fclose(fp);
//********使用fputc写入后查看1.txt发现文件中还是文本格式,并不是二进制格式*******
//使用fread和fwrite实现二进制读写文件
//*******向文件中写入结构体中的数据***********
struct Book* book_for_write, *book_for_read;
book_for_write = (struct Book*)malloc(sizeof(struct Book));
book_for_read = (struct Book*)malloc(sizeof(struct Book));
if (book_for_write == NULL || book_for_read == NULL)
{
printf("内存分配失败\n");
exit(EXIT_FAILURE);
}
strcpy(book_for_write->name, "《C语言》");
strcpy(book_for_write->author, "小强");
book_for_write->date.year = 2008;
book_for_write->date.month = 1;
book_for_write->date.day = 1;
if ((fp = fopen("binary.txt", "w")) == NULL) //以写方式打开,可以以二进制写方式“wb”打开
{
printf("打开文件失败\n");
exit(EXIT_FAILURE);
}
fwrite(book_for_write, sizeof(struct Book),1,fp); //二进制写入
fclose(fp); //关闭文件
if ((fp = fopen("binary.txt", "r")) == NULL) //以读方式打开,可以以二进制读方式“rb”打开
{
printf("打开文件失败\n");
exit(EXIT_FAILURE);
}
fread(book_for_read, sizeof(struct Book), 1, fp); //二进制读取
printf("书名:%s\n", book_for_read->name);
printf("作者:%s\n", book_for_read->author);
printf("时间:%d-%d-%d\n", book_for_read->date.year,
book_for_read->date.month,book_for_read->date.day);
fclose(fp); //关闭文件
free(book_for_write); //释放内存
free(book_for_read);
/*书名:《C语言》
作者:小强
时间 : 2008 - 1 - 1*/
//打印成功,但是打开binary.txt是看不懂的数据,说以二进制写入成功
//也说明了在以二进制读写时可以不使用二进制读写方式打开,重要的是使用的读写的函数
system("pause");
return 0;
}
网友评论