这是文件与之前的链表结合使用,可以从文件中看数据读出来,形成一条链表,同时也可以把链表的数据写入文件中
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
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有