早上好/下午对所有人来说,我已经挣扎了一段时间,任何帮助都将不胜感激:
我在C中有一个结构,还有一个二进制文件,我将数据保存为“数组”,所以它们一个接一个地存储,假设我有三个“实例”结构,它们被保存像文件中的这[0] [1] [2]。
问题是当我删除一个寄存器时,例如位置2等于[1],文件处理得正确,文件看起来像这样[0] [2]。
但是如果我在控制台中有read_register
位置2,它将继续显示之前的信息,我的意思是[1]的信息。
所以我必须完成这个程序,当我重新开始时,它正确地显示了[2]的信息。
我将添加来源:
void delete_register(){
printf("- - Borrar registro - -\nHay %i registros, ingrese el numero que desea borrar:\n", size);
int pos;
scanf(" %i", &pos);
pos--;
FILE * file= fopen("dataDogs.dat", "rb+");
if (file == NULL) {
printf("Hubo un error leyendo el archivo.\n");
}
size--;
// poisition the pointer of file in the position to erase
fseek(file, sizeof(struct dog_type)*pos, SEEK_SET);
//start overwriting the data with the information of the next in the "array"
while(pos < size){
fwrite(load_pointer(++pos), sizeof(struct dog_type), 1, file);
}
// deletes last "sizeof(struct dog_type)" bytes, to free the space of the one that was deleted
truncate("dataDogs.dat", sizeof(struct dog_type)*size);
fclose(file);
}
void * load_pointer(int pos){
struct dog_Type *dog_pt = malloc(sizeof(struct dog_type));
FILE * file= fopen("dataDogs.dat", "r");
if (file == NULL) {
printf("Hubo un error leyendo el archivo.\n");
}
// position pointer of file
fseek(file, sizeof(struct dog_type)*pos, SEEK_SET);
//read the first sizeof(struct dog_type) bytes
fread(dog_pt, sizeof(struct dog_type), 1, file);
fclose(file);
return dog_pt;
}
void read_register() {
printf("- - Leer registro - -\nHay %i registros, ingrese el numero que desea ver:\n", size);
int pos;
scanf(" %i", &pos);
print(load_pointer(--pos));
}