刚开始还可以保存文件,不知道怎么回事文件就保存不了了
void save(stu *p1)//保存数据
{
printf("========保存数据========\n");
FILE *fp;
char file[50]={0};
printf("请输入文件名:");
scanf("%s",file);
if((fp=fopen(file,"a"))==NULL)//判断文件是否打开成功
{
printf("cannot open this file\n");
exit(0);//正常运行程序并退出程序
}
fprintf(fp,"名字\t性别\t工作单位\t住宅号码\tE-Mail\t家庭住址\n");
while(p1!=NULL)
{
fprintf(fp,"%s\t",p1->name);
fprintf(fp,"%s\t",p1->wm);
fprintf(fp,"%s\t",p1->work);
fprintf(fp,"%s\t",p1->htel);
fprintf(fp,"%s\t",p1->mail);
fprintf(fp,"%s\n",p1->home);
p1=p1->next;
}
printf("========保存成功========\n");
fclose(fp);
}
从你提供的代码来看,如果出现问题不能保存文件,可能是由以下几个原因导致的:
文件名输入错误,或者该文件已经被其他程序打开或者被锁定,这样程序就不能以追加方式打开文件。
如果你运行的环境没有写入权限(例如某些严格的Linux环境),也可能导致无法写入文件。
你的程序可能没有正确处理stu的链表结构,导致了错误。
你可以尝试以下的解决方法:
确认输入的文件名及路径是否正确。记住,如果只输入了文件名,那么文件将在程序的当前工作目录中创建。
确认你有足够的权限在目录中创建和修改文件。你可以尝试在命令行中手动创建文件,以检查是否有足够的权限。
检查你的链表是否正确处理。你可以在循环中添加一些打印语句,打印出每个节点的信息,以确定链表是否被正确遍历。
尝试更改你的打开文件模式,比如使用"w"或"w+",看是否能成功创建或写入文件。记住,这将清空已存在的文件内容。
确保在程序结束前,文件已经被正确关闭。你已经在代码中做到了这一点。
使用 perror 函数。如果 fopen 函数失败,它将设置全局错误号,你可以使用 perror 函数来打印出错误信息。
更改你的代码如下:
if((fp=fopen(file,"a"))==NULL)//判断文件是否打开成功
{
perror("Error opening file:");//打印错误信息
exit(1);
}
这将打印出更详细的错误信息,帮助你更好地诊断问题。
写入文件,确保路径文件夹都已建立且文件夹名正确,若都正确,考虑写在C:盘是否有权限,可以先写到 D:盘试试。
不知道你这个问题是否已经解决, 如果还没有解决的话:记得头文件声明和test里引用哈!
void SaveContact(Contact* pc)
{
//写数据
//打开文件
FILE* pf = fopen("contact.txt", "wb");
if (NULL == pf)
{
perror("SaveContact");
}
else
{
int i = 0;
for (i = 0; i < pc->sz; i++)
{
fwrite(pc->data + i, sizeof(PeoInfo), 1, pf);
}
fclose(pf);
pf = NULL;
printf("保存数据成功\n");
}
}