这是文件与之前的链表结合使用,可以从文件中看数据读出来,形成一条链表,同时也可以把链表的数据写入文件中
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
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/110634.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...