首页 > 解决方案 > 从C中的二进制文件中删除最后一个结构

问题描述

在我写的这个函数中,我基本上是在寻找我要删除的特定结构。我将二进制文件上的最后一个结构复制到我要删除的结构的位置。(例如,如果我在文件中有 5 个结构,并且我想删除第 4 个结构,我将第 5 个结构复制到第 4 个位置)之后我想删除二进制文件中的最后一个结构。我有一些问题。我曾尝试使用 SetEndOfFile() 但不知道如何使用它。请帮忙。

void Delete_user(char* delete_user_from_system)
{
user del_user;

long loction_in_file;
char id_input_to_delete[15];
char id[15], pass[15], f_n[20];
int s_l = 0, cnt = 0,num_of_users=0;
long sz = 0;

printf("\n\nEnter ID Of The User You Wish To Delete: ");
scanf("%s", id_input_to_delete);
flushall();
FILE* d_u = fopen(delete_user_from_system, "rb+");

while (!feof(d_u))
{
    fread(&del_user, sizeof(user), 1, d_u);
    if (strcmp(id_input_to_delete, del_user.ID) == 0)
    {
        printf("\n\nID:%s \nfull name:%s \nSecurityLevel:%d", del_user.ID, 
        del_user.FullName, del_user.SecurityLevel);
        break;
    }
    cnt++;
}

rewind(d_u);
while (!feof(d_u))
{
    fread(&del_user, sizeof(user), 1, d_u);
    num_of_users++;
}
fclose(d_u);

d_u = fopen(delete_user_from_system, "rb+");
fseek(d_u, sizeof(user)* (num_of_users - 1), SEEK_SET);
fread(&del_user, sizeof(user), 1, d_u);
strcpy(id, &del_user.ID);
strcpy(pass, &del_user.Password);
strcpy(f_n, &del_user.FullName);
s_l = del_user.SecurityLevel;
printf("\n\nID:%s \nfull name:%s \nSecurityLevel:%d", del_user.ID, 
del_user.FullName, del_user.SecurityLevel);
fclose(d_u);


d_u = fopen(delete_user_from_system, "rb+");
fseek(d_u, sizeof(user)*cnt, SEEK_SET);
strcpy(&del_user.ID, id);
strcpy(&del_user.Password, pass);
strcpy(&del_user.FullName, f_n);
del_user.SecurityLevel = s_l;
fwrite(&del_user, sizeof(user), 1, d_u);
fclose(d_u);

}

假设文件中的最后 4 行是一个结构(带有“z”的那个....),我想删除最后 4 行

标签: cvisual-studiofunctionfilestruct

解决方案


推荐阅读