匿名用户
1级
2017-11-09 回答
t_Link *FileRead()
{
FILE *fp;
int ret;
int filesize;
t_Link *phead;
t_Link *p;
ret = 0;
filesize = 0;
phead = NULL;
p = NULL;
fp = fopen("./link.txt", "r");
if(NULL == fp)//打开文件保护
{
perror("open error! \n");
fclose(fp);
return phead;
}
fseek(fp, 0, SEEK_END);
filesize = ftell(fp);
fclose(fp);
if(filesize == 0)//判断是否为空文件
{
return phead;
}
else
{
fp=fopen("./link.txt","r");
p=(t_Link *)malloc(sizeof(t_Link));//重新读出节点再链接成一条完整链表
ret=fread(p, sizeof(t_Link), 1, fp);
if(ret==0)
{
fclose(fp);
perror("read error\n");
return NULL;
}
if(p->next==NULL)//如果只有一个节点,return返回
{
phead=p;
fclose(fp);
return phead;
}
p->next=NULL;
phead=p;
while(1)
{
p=(t_Link *)malloc(sizeof(t_Link));
ret=fread(p, sizeof(t_Link), 1, fp);
if(ret==0)//如果读文件失败,退出系统
{
fclose(fp);
perror("read error\n");
return NULL;
}
if((p->next)==NULL)//如果是最后一个节点,循环终止
{
p->next=phead;
phead=p;
break;
}
p->next=phead;
phead=p;
}
fclose(fp);
}
return phead;
}