C语言—删除文件中的指定内容

C语言—删除文件中的指定内容

学生信息管理系统临近尾声,在管理员端口可以对教师的信息进行管理,今天突然想起来只能添加教师信息但不能删除教师信息,对于学生信息的删除,一直都是先将文件内的数据读入链表中,在链表中删除节点,再重新写进文件里。但因为教师信息比较少,并且只有用户名和密码,所以我并没有用链表来存放教师的信息,所以要删除教师信息只能直接使用文件的操作,以上是背景


  • 先介绍一下这个删除操作的中心思想:创建一个临时文件,用数组录入你要删除的教师的信息,,然后在原文件中查找,遇到与要删除内容不同的数据,将这些数据写入临时文件中,当遇到要删除的内容时,利用文件的随机读写跳过这些数据,继续将后面的数据录入到临时文件中,最后删除原文件,并将临时文件的名字改为原文件的名字,这样就实现了对指定内容的删除。

用到的函数:

  • 文件的打开与关闭fopen(),fclose();
  • 文件的模块读写:fread(),fwrite();
  • strcmp() 比较两字符串,判断是否相同;
  • 文件的随机读写操作:rewind()和fseek(),功能分别是将文件指针指向文件开头和移动文件指针到指定位置;
  • 删除文件操作remove();
  • 重命名文件操作:rename();

一下是函数的模块(不想重写了,直接上项目里的模块):

void delete_tea(){                                                 // 删除教师信息(直接在文件内部操作) 
    FILE *fp,*ft;
    char set[20];
    int index=0;
    printf("请输入要删除的教师用户名:");
    scanf("%s",set);
    char key[20];
    fp=fopen("d:\\t_key.txt","rt+");
    ft=fopen("d:\\temp.txt","wt");
    if(fp==NULL || ft==NULL){
        printf("错误!\n");
        return;
    }
    while(fread(key,sizeof(key),1,fp)){
        if(strcmp(key,set)!=0){
           fwrite(key,sizeof(key),1,ft);
           index++;
        }
        else{
            rewind(fp);
            fseek(fp,sizeof(key)*(index+2),0);
        }
    }
        fclose(fp);
        fclose(ft);
        remove("d:\\t_key.txt");
        rename("d:\\temp.txt","d:\\t_key.txt");
        printf("教师信息删除成功!\n");

}

你可能感兴趣的:(C语言)