美文网首页
二进制读写文件

二进制读写文件

作者: lxr_ | 来源:发表于2021-10-31 10:21 被阅读0次
#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;
}

相关文章

网友评论

      本文标题:二进制读写文件

      本文链接:https://www.haomeiwen.com/subject/wrygaltx.html