当尝试将树的内容保存到文件时,没有保存任何内容,我不知道为什么。 这些是我正在进行的函数调用:
insert(tree, cust.id, filePos);
saveTree(tree, "cIndex.dat", 0);
这些是涉及的功能:
struct NODE *insert(struct NODE *node, char info[], int pos)
{
int length = strlen(info);
// 1. If the tree is empty, return a new, single node
if (node == NULL)
{
struct INFO stuff;
//stuff = (struct INFO*)malloc(sizeof(struct INFO));
strncpy(stuff.data, info, DATA_LENGTH);
stuff.filePos = pos;
node = malloc(sizeof(struct NODE));
node->data = stuff;
node->left = NULL;
node->right = NULL;
return(node);
}
else
{
// 2. Otherwise, recur down the tree
if (strncmp(info, node->data.data, length) <= 0)
{
node->left = insert(node->left, info, pos);
}
else
{
node->right = insert(node->right, info, pos);
}
return(node); // return the (unchanged) node pointer
}
}
int saveTree(struct NODE *node, char filename[], int posInFile)
{
FILE *file;
file = fopen(filename, "r+b"); //r+ so as to overwrite existing data instead of appending
char c;
char posStr[POS_LENGTH];
fseek(file, posInFile, SEEK_SET);
while((c = fgetc(file)) != EOF)
{
if(node != NULL)
{
fseek(file, -1, SEEK_CUR);
fwrite(node->data.data, sizeof(char), DATA_LENGTH, file);
sprintf(posStr, "%d", node->data.filePos);
fwrite(posStr, sizeof(char), POS_LENGTH, file);
posInFile = ftell(file);
saveTree(node->left, filename, posInFile);
saveTree(node->right, filename, posInFile);
}
}
fclose(file);
return 1;
}
非常感谢任何帮助。
答案 0 :(得分:0)
这可能是一些事情。从您上一个问题开始,我注意到您实际上并未存储您创建的树(在loadTree
中)。你修好过吗?
但只是查看你的保存功能......你应该打开文件一次并递归传递FILE*
。为方便起见,请在外面执行并传递FILE*
而不是名称。您正在使用缓冲输出而不进行刷新,否则您将遇到麻烦。
int saveTree( struct NODE *node, FILE *fp );
// ...
FILE *fp = fopen( filename, "wb" );
saveTree( tree, fp );
fclose(fp);
您是否有理由使用文本值编写二进制文件?您确定不想在文本模式下打开并使用fprintf
吗?