如何跟踪二进制文件中的项目

时间:2018-06-09 00:36:00

标签: c file

我有两个这样的结构:

typedef struct user{
    char nick[NICKSIZE];
    char name[NAMESIZE];
    int n_messages;
    int n_following;
    int n_followers;
    following *arr_following;
    following *arr_unfollowed;
}user;

typedef struct user_pos {
    char nick[6];
    int position_in_file;
}user_pos;

我想创建一个用户并将其插入到二进制文件中,但我还想跟踪新用户在user_pos结构中存储位置的位置,以便我以后可以通过fseek获取()

void insert_user(char *input_a, char *input_b){
    user *new_user = malloc(sizeof(user));
    strcpy(new_user->name, input_b);
    strcpy(new_user->nick, input_a);
    new_user->n_following = 0;
    new_user->n_messages = 0;
    new_user->n_followers = 0;
    new_user->arr_following = malloc(sizeof(following));
    new_user->arr_unfollowed = malloc(sizeof(following)); 

    FILE *fp = fopen("data_base.bin", "ab+");
    fwrite(&new_user, sizeof(new_user),1,fp);

    user_pos *new_user_pos = malloc(sizeof(user_pos));
    strcpy(new_user_pos->nick, input_a);
    new_user_pos->position_in_file = ????

    (...)
}

我究竟应该放在这里:new_user_pos->position_in_file = ????然后fseek()函数如何检索项目?

提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以在ftell()之前使用fwrite()来获取文件中的位置(即写入开始的字节)。

您可以稍后使用fseek(fp, position_in_file, SEEK_SET)跳转到该位置。

确保处理每个函数的返回代码 - 例如,如果磁盘已满,则写入可能会失败。