在C中重新启动之前,文件不会更新

时间:2015-03-01 15:59:21

标签: c file pointers save

早上好/下午对所有人来说,我已经挣扎了一段时间,任何帮助都将不胜感激:

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

0 个答案:

没有答案