不知道怎么回事文件就保存不了了(关键词-保存文件)

刚开始还可以保存文件,不知道怎么回事文件就保存不了了

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);
}

img

从你提供的代码来看,如果出现问题不能保存文件,可能是由以下几个原因导致的:

  1. 文件名输入错误,或者该文件已经被其他程序打开或者被锁定,这样程序就不能以追加方式打开文件。

  2. 如果你运行的环境没有写入权限(例如某些严格的Linux环境),也可能导致无法写入文件。

  3. 你的程序可能没有正确处理stu的链表结构,导致了错误。

你可以尝试以下的解决方法:

  1. 确认输入的文件名及路径是否正确。记住,如果只输入了文件名,那么文件将在程序的当前工作目录中创建。

  2. 确认你有足够的权限在目录中创建和修改文件。你可以尝试在命令行中手动创建文件,以检查是否有足够的权限。

  3. 检查你的链表是否正确处理。你可以在循环中添加一些打印语句,打印出每个节点的信息,以确定链表是否被正确遍历。

  4. 尝试更改你的打开文件模式,比如使用"w"或"w+",看是否能成功创建或写入文件。记住,这将清空已存在的文件内容。

  5. 确保在程序结束前,文件已经被正确关闭。你已经在代码中做到了这一点。

  6. 使用 perror 函数。如果 fopen 函数失败,它将设置全局错误号,你可以使用 perror 函数来打印出错误信息。

更改你的代码如下:

if((fp=fopen(file,"a"))==NULL)//判断文件是否打开成功
{
    perror("Error opening file:");//打印错误信息
    exit(1);
}

这将打印出更详细的错误信息,帮助你更好地诊断问题。

写入文件,确保路径文件夹都已建立且文件夹名正确,若都正确,考虑写在C:盘是否有权限,可以先写到 D:盘试试。

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 这有个类似的问题, 你可以参考下: https://ask.csdn.net/questions/967702
  • 这篇博客你也可以参考下:头文件如何关联源文件
  • 除此之外, 这篇博客: 通讯录文件操作化中的 保存数据 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:

     记得头文件声明和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");
    	}
    	
    }


  • 您还可以看一下 尹涛老师的如何写好毕业论文课程中的 如何编写毕业论文小节, 巩固相关知识点

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^