c - 从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);
}
解决方案
推荐阅读
- arrays - Matlab:使用矩阵的滑动窗口
- python-3.x - 无法在 Google Classroom API 中使用方法 courses.courseWork.studentSubmissions.return()
- javascript - 在 Firebase 的实时数据库中,以下关于从“路径”中删除所有侦听器是否正确?
- spring-boot - 无法在 org.hibernate.mapping.Column.getSqlTypeCode(Column.java:198) 处构建 Hibernate SessionFactory,NullPointerException
- prolog - 检查一个数字是否在两个值之间
- android-automotive - 专辑封面现在显示在 Automotive OS 的媒体应用程序上
- ios - 在另一个视图后面渲染视图 - SwiftUI
- python - 无法正确拟合多项式回归线
- mysql - 如何从特定 id 获取按 desc 排序的行
- python - 解析字典的字典时,是否可以使用通配符选项来访问嵌套字典?