我编写了一个代码,其中我将信息保存到文件中以便稍后检索。有一项任务我需要用新对象覆盖文件中的对象(有点像更新保存的信息)。但是当我在更新后检索信息时,会打印旧信息。该对象未被覆盖。请验证我的错误。这是写入文件的代码片段:
fig = plt.figure()
sns.set_style("ticks")
g = sns.JointGrid(X, Y)
g.plot_marginals(sns.distplot, color=".5")
g.plot_joint(plt.hexbin, bins='log', gridsize=30, cmap=color, extent=[0, np.max(X), 0, np.max(X)])
P.S。从我读取文件并想要写回的指针是正确的。我通过打印指针来验证它们。我只是不明白为什么新对象没有保存在文件中。
HeaderInfo rx; //This is the object which I want to write.
//headers is the pointer to file where all the objects are saved.
headers.read((char*)&rx , sizeof(HeaderInfo)); //First I read the old info from the file
headers.seekp(it->second->getHeaderLocation()); //go back to where the info was read from
//In the lines of code below, I modified the old information.
strcpy(rx.key,new_key.c_str());
rx.headerLocation = headers.tellp();
rx.dataSize = sizeof(HeaderInfo);
rx.freeSpace = 0;
rx.location = it->second->getLocation();
//Now writing back the updated object to file.
writeEmptyHeader(rx , headers.tellp());
编辑: 这是writeEmptyHeader函数:
//This is the definition of HeaderInfo. It is basically a struct:
struct HeaderInfo{
char key[MAX_KEY_LEN];
long location;
long headerLocation;
long dataSize;
long freeSpace;
};
P.S。:我知道名字看起来很模糊。我意识到,它确实是。但它只是将标题写入位置fptr的文件。我在调试代码时单独创建了这个函数,所以没有多想。忽略这个名字! :P