这是我到目前为止所得到的,但我实际上并没有写在文件上。我想我没有正确使用 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);
}
我该怎么做?
答案 0 :(得分:3)
首先,该文件是 binary ,因此您不应该真正将其作为文本阅读。
其次,问题的根源是你如何编写结构:
open cluster
如果您阅读例如this fwrite
reference你会看到两个大小参数是:
第二个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];