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 你会看到两个大小参数是:
- 数据结构的大小
- 数据结构个个
你得到了第二个大小参数错误,每次你调用 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);
这是我到目前为止得到的,但我实际上并没有写在文件上。我认为我没有正确使用 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 你会看到两个大小参数是:
- 数据结构的大小
- 数据结构个个
你得到了第二个大小参数错误,每次你调用 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);