C - 如果文件中的struct,如何持久化数组

时间:2017-10-15 16:12:05

标签: c file fwrite

这是我到目前为止所得到的,但我实际上并没有写在文件上。我想我没有正确使用 fwrite()

typedef struct t_directory {
  int index;
  char nombre[255];
  int padre;
}t_directory;

int main(void) {

    t_directory* tabla[100];

    int i;
    for(i=0; i<100;i++){
        tabla[i] = malloc(sizeof(struct t_directory));
        tabla[i]->index = 0;
        sprintf(tabla[i]->nombre, "");
        tabla[i]->padre = 0;
    }

    tabla[0]->index = 0;
    sprintf(tabla[0]->nombre, "root");
    tabla[0]->padre= -1;

    tabla[1]->index = 1;
    sprintf(tabla[1]->nombre, "user");
    tabla[1]->padre= 0;

    FILE * file= fopen("directorios.txt", "wb");
    if (file != NULL) {
        fwrite(tabla[0], sizeof(struct t_directory), sizeof(struct t_directory), file);
        for(i=1;i<100;i++){
            if(tabla[i]->index != 0){
                fwrite(tabla[i], sizeof(struct t_directory), sizeof(struct t_directory), file);
            }
        }
        fclose(file);
    }

我该怎么做?

1 个答案:

答案 0 :(得分:3)

首先,该文件是 binary ,因此您不应该真正将其作为文本阅读。

其次,问题的根源是你如何编写结构:

open cluster

如果您阅读例如this fwrite reference你会看到两个大小参数是:

  1. 数据结构的大小
  2. 数据结构的
  3. 第二个size-argument错误,每次调用fwrite(tabla[0], sizeof(struct t_directory), sizeof(struct t_directory), file); 时,调用都会尝试将sizeof(struct t_directory) * sizeof(struct t_directory)个字节写入文件。

    正确应该写一个结构:

    fwrite

    如果您不关心磁盘上的空间(对于您的桌子而言是最小的),那么我建议您一次性编写整个阵列。

    为了使你工作,你当然需要有一个对象的数组而不是指针:

    fwrite(tabla[0], sizeof(struct t_directory), 1, file);
    //                                           ^
    // Note the value one here, to write only a single structure
    

    然后你可以在一个电话中写下所有内容:

    t_directory tabla[100];