索引文件的建立与查询示例(六)

在上一节,我们将链表写入了文件,共写入5个节点的数据,小计80字节。在这一节,我们试着读取文件中的内容,看是否能展示至屏幕上。


//按块大小进行读取,定义头结点的大小

void readfromFile(const char *filename)

{
FILE *file=fopen(filename,"r");
if(!file)
{
    perror ("Error opening the file.");
    exit(-1);
}
Node *current;//因为链表头是空内容;
current=(Node *)malloc(sizeof(Node));//分配空间
    printf("file is found\n");
    printf("file name %s is found\n",filename);
    fseek(file, 0L, SEEK_END); // 将文件指针移动到文件尾部
    long filesize = ftell(file);   // 获取文件指针相对于起始位置的偏移量
    printf("当前预读取的文件大小为 %ld 字节\n", filesize);

//按块大小进行读取
    fseek(file, 0L, SEEK_SET); // 将文件指针移回到文件头部
    filesize = ftell(file);   // 获取文件指针相对于起始位置的偏移量
    printf("当前读取的文件位置为 %ld 字节\n", filesize);

while(!feof(file))
{
    filesize = ftell(file);   // 获取文件指针相对于起始位置的偏移量
    printf("----------------------------------------------\n");

    printf("读取前的文件位置为第 %ld 字节\n", filesize);
    printf("读取的块大小为%d 字节\n", sizeof(Node));
    printf("预计读取出块大小为%d 字节存入内存中的大小是%d\n", sizeof(Node),sizeof(*current));
    printf("开始读取块,输出块中数据\n");

    fread(current,sizeof(Node),1,file);
    printf("当前块数据是:%d\n",current->data);
    filesize = ftell(file);   // 获取文件指针相对于起始位置的偏移量
    printf("读取后的文件位置为第 %ld 字节\n", filesize);

}

fclose(file);

}

我们来运行程序验证
在这里插入图片描述
可以看出文件中的链表数据节点逐个被读取至内存中,并打印出来。由此可见,链表数据的建立、写入文件、读取文件是利用结构体指针实现,在文件中顺序写入并读取出来。

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值