C - 如果文件中有结构,如何保留数组

C - How to persist array if struct in file

这是我到目前为止得到的,但我实际上并没有写在文件上。我认为我没有正确使用 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);
    }

我应该怎么做?

首先,该文件是 二进制文件,因此您应该无法真正阅读它。

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

fwrite(tabla[0], sizeof(struct t_directory), sizeof(struct t_directory), file);

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

  1. 数据结构的大小
  2. 数据结构

你得到了第二个大小参数错误,每次你调用 fwrite.

时,调用尝试将总共 sizeof(struct t_directory) * sizeof(struct t_directory) 字节写入文件

正确的应该写成一个结构:

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

如果您不关心磁盘上的 space(这对于您的 table 来说是最小的),那么我建议您一次性写入整个数组。

为此,您当然需要有一个 对象数组 而不是指针:

t_directory tabla[100];

然后你就可以一次写完了:

fwrite(tabla, sizeof tabla[0], sizeof tabla / sizeof tabla[0], file);