前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >文件 与 链表的同步

文件 与 链表的同步

作者头像
全栈程序员站长
发布于 2021-08-12 06:41:18
发布于 2021-08-12 06:41:18
4770
举报

     这是文件与之前的链表结合使用,可以从文件中看数据读出来,形成一条链表,同时也可以把链表的数据写入文件中

filedata头文件

/******************************************************** *              * *  ☆☆☆☆☆文件读写 函数的声明 ☆☆☆☆☆  * *              * ********************************************************/ #ifndef _FILEDATA_H_ #define _FILEDATA_H_

#include “list.h”

int FILE_write(int size,char *file,PNode head);

PNode FILE_find_all(int size,char *file); 

#endif _FILEDATA_H_

#include “filedata.h” #include “list.h” /********************************************* *函数名称:int FILE_write(int size,char *file,PNode NodeHead)

*功能描述:对链表的内容全部写到对应的文件中

*参数说明:size [IN] 输入数据的大小      file [IN] 写入到哪个文件      NodeHead [IN]链表头结点

*返回值:  成功返回SUCCESS,失败返回FAILURE

*********************************************/ int FILE_write(int size,char *file,PNode NodeHead) {  FILE *pf;  PNode tempnode=NULL;  PNode curnode=NULL;  tempnode=NodeHead;  if ((pf=fopen(file,”wb+”))==NULL)  {   printf(“文件打开失败!\n”);   return FAILURE;  }

 if (0!=fclose(pf))  {   printf(“文件关闭失败!”);   return FAILURE;  }

 if ((pf=fopen(file,”ab+”))==NULL)  {   printf(“文件打开失败!\n”);   return FAILURE;  } 

 while(tempnode!=NULL)  {   if (tempnode->next!=NULL)       //判断下一个结点是否存在   {    curnode=tempnode->next;   }   else   {    curnode=NULL;   }   if (1!=fwrite(tempnode->data,size,1,pf))   {    printf(“数据写入失败!\n”);    return FAILURE;   }   fflush(pf); //刷新缓冲区   tempnode=curnode;  }

 if (0!=fclose(pf))  {   printf(“文件关闭失败!”);   return FAILURE;  }

 return SUCCESS; }

/********************************************* *函数名称:PNode FILE_find_all(int size,char *file)

*功能描述:对链表的内容全部写到对应的文件中

*参数说明:size [IN] 输入数据的大小      file [IN] 读哪个文件

*返回值:  成功返回头结点,失败返回NULL

*********************************************/ PNode FILE_find_all(int size,char *file)    //用于读取文件数据,并存储到链表到去 {  int Inode=0;  int Icount=0;  void *data;  FILE *pf;

 if ((pf=fopen(file,”rb+”))==NULL)  {   printf(“文件打开失败!\n”);   return NULL;  }

 data=(void*)malloc(size);              //给data分配空间,用于存放数据  memset(data,0,size);

 while (0!=fread(data,size,1,pf))     {   Icount++;   if (Inode==0)   {    if ((NodeHead=List_init(data))==NULL)//对头结点进行初始化,如果失败就返回     return NULL;

   Inode++;   }   else   {    if (List_add(data,NodeHead)==FAILURE)  //如果头结点初始化成功,就进行继续读取    {     printf(“添加数据失败\n”);     return NodeHead;      //如果读取失败就,就返回    }   }   data=(void*)malloc(size);                   //继续为下一个数据分配空间   memset(data,0,size);    }

 free(data);          //释放最后一个没有使用的空间

 if (0!=fclose(pf))  {   printf(“文件关闭失败!”);  }  if (Icount==0)  {   return NULL;  }  return NodeHead; }

转载于:https://blog.51cto.com/2378949/538351

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/110634.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档